我必须在JAVA中通过SQLPLUS执行sql语句而不使用该文件 正如我们在sqlplus中的命令行中所做的那样。 我需要在Java
中的同一行中建立连接并执行sql语句echo "show user;" | sqlplus USERNAME/PASSWORD as sysdba
我需要为此找到连接字符串。 如何在Java中做同样的事情?
欢迎提出任何建议。
答案 0 :(得分:1)
有一篇文章here描述了调用Runtime.getRuntime()的更好方法.exec()
链接的示例可能有点过时,但它仍然有效。
以下代码基于this
import java.io.*;
public class doscmd
{
public static void main(String args[])
{
try
{
String[] cmd = new String[3];
cmd[0] = "cmd.exe" ;
cmd[1] = "/C" ;
cmd[2] = args[0];
Process p=Runtime.getRuntime().exec(cmd);
BufferedReader reader=new BufferedReader(
new InputStreamReader(p.getInputStream())
);
BufferedReader error=new BufferedReader(
new InputStreamReader(p.getErrorStream())
);
String line;
while((line = reader.readLine()) != null)
{
System.out.println(line);
}
String errLine;
while((errLine = error.readLine()) != null)
{
System.out.println(errLine);
}
}
catch(IOException e1) {e1.printStackTrace();}
System.out.println("Done");
}
}
由于我没有sysdba访问权限,所以我尝试了:
java doscmd "@echo show user; | sqlplus -L USERNAME/PASSWORD@DATABASE"
它有效。
你应该可以这样做:
java doscmd "@echo show user; | sqlplus -L USERNAME/PASSWORD@DATABASE as sysdba"
我得到了
ERROR:
ORA-01031: insufficient privileges
这让我相信它也会起作用。