我有一个带有多个查询和表的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
答案 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环境变量中。