【问题标题】:Run SQL File on Java with SqlPlus使用 SqlPlus 在 Java 上运行 SQL 文件
【发布时间】:2018-02-22 17:31:48
【问题描述】:

我正在尝试使用 java 在 sqlplus 上运行 sql 文件。几乎尝试了互联网上的所有内容,但仍然没有找到有关此问题的任何线索。下面的代码运行 cmd ,将 sqlplus 与我的凭据连接并处理我的文件,但控制台日志仍然挂起,无法写入创建的表或其他内容。在 db 端,根本没有创建表。 当我手动尝试我的步骤时,我手动模拟了 cmd,在@pathtoscriptfile 命令之后我需要“/”并按回车键创建表。 我无法在 java 上模拟这个目的。

有什么帮助吗?

public static void main(String[] args) throws IOException {

           String[] command = {"sqlplus", "username/password@ip:port/servicename", "@C:/Users/erkan.erkisi/Desktop/Jenkins/123.sql"};
            ProcessBuilder probuilder = new ProcessBuilder( command );           

            Process process = probuilder.start();

            //Read out dir output
            InputStream is = process.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line;
            System.out.printf("Output of running %s is:\n",
                    Arrays.toString(command));
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }

            //Wait to get exit value
            try {
                int exitValue = process.waitFor();
                System.out.println("\n\nExit Value is " + exitValue);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }



}

我正在尝试执行的那个文件中的脚本(这是示例代码,可能是包、过程等);

create table xxer_erkan (
id number,
tarih date)

【问题讨论】:

    标签: java sql cmd sqlplus


    【解决方案1】:

    您可以通过将 SQLcl(sqldev 的 sql 脚本引擎)包含到您的 java 代码中并调用这些功能来完全避免调用 sqlplus。这是一个示例然后运行它们:

    sqlcl.setStmt(<SCRIPT  HERE>);
    sqlcl.run();
    

    我在这里写了一篇关于它的博客文章:

    http://krisrice.io/2016-11-15-sqlcl-as-library-in-existing-programs/

    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/XE","klrice","klrice");
    
    //#get a DBUtil but won't actually use it in this example
    DBUtil util = DBUtil.getInstance(conn);
    
    //#create sqlcl
    ScriptExecutor sqlcl = new ScriptExecutor(conn);
    ByteArrayOutputStream bout = new ByteArrayOutputStream();
    BufferedOutputStream buf = new BufferedOutputStream(bout);
    sqlcl.setOut(buf);
    
    //#setup the context
    ScriptRunnerContext ctx = new ScriptRunnerContext();
    
    //#set the context
    sqlcl.setScriptRunnerContext(ctx);
    ctx.setBaseConnection(conn);
    
    //#change the format
    sqlcl.setStmt("@C:/Users/erkan.erkisi/Desktop/Jenkins/123.sql");
    sqlcl.run();
    
    
    String results = bout.toString("UTF8");
    System.out.println(results);
    

    【讨论】:

      【解决方案2】:

      我解决了放置“;”的问题脚本结束。

      create table xxer_erkan (
      id number,
      tarih date);
      

      谢谢

      【讨论】:

        猜你喜欢
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        • 2011-06-06
        • 2018-02-18
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多