【问题标题】:execute sql in command line through sqlplus in java [duplicate]通过java中的sqlplus在命令行中执行sql [重复]
【发布时间】:2014-05-28 09:00:49
【问题描述】:

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

echo "show user;" | sqlplus USERNAME/PASSWORD as sysdba

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

欢迎任何建议。

【问题讨论】:

  • 这完全是一个不同的问题。在这个问题中,我的要求是在同一行中创建连接并运行 SQL 语句,而不是在其语法中使用文件。
  • 我看不出有什么不同。在这两种情况下,您都(尝试)在 Java 中运行 sqlplus。连接始终由sqlplus 完成,从不在您的Java 程序中。

标签: java sql oracle sqlplus


【解决方案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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2020-02-26
    • 2021-08-19
    • 1970-01-01
    • 2021-03-02
    • 2016-03-21
    相关资源
    最近更新 更多