如何从java执行sql文件

时间:2011-11-29 01:00:53

标签: java sql oracle jdbc io

我有一个带有多个查询和表的ORACLE SQL sctipt,我想在程序开始时从我的java程序运行该脚本,以确保一切都在正确的位置。我发现了一个运行脚本的代码,但由于某些原因它不起作用。任何人都可以提供样品,以便我可以遵循它。

这是我发现的:

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();
}

但它不起作用。

错误

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

3 个答案:

答案 0 :(得分:5)

如果你有资源,将脚本中的SQL移植到Java程序本身会好得多。

请参阅Java JDBC tutorial

答案 1 :(得分:2)

您正在尝试从代码中运行外部程序,这不是一个好的解决方案。

如果您使用Ant,则可以在Ant中使用sql任务:http://ant.apache.org/manual/Tasks/sql.html

如果您不使用Ant,则应该使用常规的jdbc连接。

答案 2 :(得分:2)

您可能正在运行EnterpriseDB Postgres Plus Advanced Server,它允许您使用psql运行Oracle代码。文件名“Lab_05_Tables.sql”表明了一个教育环境,所以请原谅我,如果我觉得我过分对待你是一个新手。

在使用Java工作之前,你应该让你的执行语句在命令行中自行运行。

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

这里可能有很多错误,你需要弄清楚。您的命令行建议您希望在运行数据库服务器的同一服务器上运行java程序并安装数据库客户端,并且您使用用户名“sas”登录名为“oracle”的数据库“无需密码。如果其中任何一个不正确,那么在使用Java应用程序之前,您应该在数据库上找到帮助。我会省略“-h @localhost”。

如果您确定所有工作正常并且问题的范围只是让Java执行您的命令,那么您可能只需要将psql添加到PATH环境变量中。