通过java中的sqlplus在命令行中执行sql

时间:2014-04-14 11:55:50

标签: java sql oracle sqlplus

我必须在JAVA中通过SQLPLUS执行sql语句而不使用该文件 正如我们在sqlplus中的命令行中所做的那样。 我需要在Java

中的同一行中建立连接并执行sql语句
echo "show user;" | sqlplus USERNAME/PASSWORD as sysdba

我需要为此找到连接字符串。 如何在Java中做同样的事情?

欢迎提出任何建议。

1 个答案:

答案 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

这让我相信它也会起作用。