2011-11-29 25 views
8

Tengo un sctipt de ORACLE SQL con varias consultas y tablas, y quiero ejecutar ese script desde mi programa java al inicio del programa para asegurar que todo esté en el lugar correcto. Encontré un código para ejecutar el script, pero no funciona por alguna razón. ¿Alguien puede proporcionarme muestras para que pueda seguirlo?Cómo ejecutar el archivo sql desde java

Esto es lo que encontré:

try { 
    String line; 
    Process p = Runtime.getRuntime().exec ("psql -U sas -d oracle -h @localhost -f Lab_05_Tables.sql"); 
    BufferedReader input =new BufferedReader(new InputStreamReader(p.getInputStream())); 

    while ((line = input.readLine()) != null) {   
     System.out.println(line); 
    } 
    input.close(); 
} 
catch (Exception err) { 
    err.printStackTrace(); 
} 

Pero no funciona sin embargo.

error

java.io.IOException: Cannot run program "psql": CreateProcess error=2, The system  
cannot find the file specified 
+3

¿Qué no está funcionando? ¿Tienes un error? – talnicolas

+0

Formatee su código, de lo contrario, downvotes ... – Beginner

+1

¿No es 'psql' la línea de comandos de PostgreSQL? ¿Puede manejar Oracle también? – Thilo

Respuesta

5

Sería mucho mejor, si tiene recursos, transferir los SQL de su script al programa Java.

Consulte Java JDBC tutorial.

+1

escribir SQL dentro de su programa Java es una mala idea! Necesitará recompilar su programa cada vez que cambie las declaraciones SQL o su esquema de base de datos. – GETah

+0

@GETah ¿Cómo parametrizará los SQL que están fuera de su programa? Por ejemplo, si agregó una nueva columna de tabla, ¿cómo puede usarla en su parte 'WHERE new_table =?' De SQL desde JDBC? Se puede hacer usando algún lenguaje de metadatos, pero la mayoría de las veces no tuve necesidad de tal nivel de complejidad, ya que, de todos modos, cada cambio en el esquema DB se hace debido a la nueva característica añadida al código Java, por lo que necesita recompilarlo de todas formas. Sin embargo, todavía puede hacerse si lo necesita. –

+0

Prefiero poner mis declaraciones SQL dentro de un archivo de texto. Imagine un escenario donde necesita cambiar el nombre de una tabla en su base de datos. En este caso, el código no requiere recompilación, que no es el caso cuando incrusta SQL directamente en su código de producción. – GETah

2

Usted está tratando de ejecutar un programa externo de su código, que no es una buena solución.

Si utiliza Ant, puede utilizar sql tarea de Ant: http://ant.apache.org/manual/Tasks/sql.html

Si no utiliza Ant, sólo debería utilizar la conexión JDBC regular.

2

Es posible que esté ejecutando EnterpriseDB Postgres Plus Advanced Server, lo que le permitiría ejecutar el código de Oracle utilizando psql. El nombre del archivo "Lab_05_Tables.sql" sugiere un entorno educativo, así que discúlpeme si parece que lo estoy tratando indebidamente como un novato.

Antes de hacer que esto funcione en Java, debe hacer que la sentencia ejecutada se ejecute sola en la línea de comandos.

psql -U sas -d oracle -h @localhost -f Lab_05_Tables.sql 

Muchas cosas pueden estar mal aquí y tienes que averiguarlo. Su línea de comando sugiere que está esperando ejecutar el programa Java en el mismo servidor que ejecuta su servidor de base de datos y tiene instalado el cliente de base de datos, y que está usando el nombre de usuario "sas" para iniciar sesión en una base de datos llamada "oráculo" "sin contraseña requerida. Si algo de eso no es correcto, entonces debería encontrar ayuda para configurar su base de datos antes de trabajar en su aplicación Java. Yo omitiría el "-h @localhost".

Si está seguro de que todo lo que está funcionando y el alcance de su problema es simplemente hacer que Java ejecute su comando, entonces puede que necesite agregar psql a su variable de entorno PATH.

+0

'psql' es para PostgreSQL, no estará disponible si solo está instalado Oracle, y si lo fuera, no podría conectarse a Oracle. (y los argumentos para sqlplus son completamente diferentes) –

+0

Lo entiendo, y es cierto para el código abierto ordinario PostgreSQL, que es diferente del producto que mencioné. Consulte http://enterprisedb.com/products-services-training/products/postgres-plus-advanced-server/advanced-server-oracle-features. – phatfingers

Cuestiones relacionadas