当前位置: 首页 > 知识库问答 >
问题:

如何执行SQL文件从CMD提示符使用JavaProcessBuilder

云凌
2023-03-14

我用ProcessBuilder写了一个java程序来启动CMD提示符

public class OracleConnect {

    public static void main(String[] args) throws IOException {
        String[] cmd = new String[] { "sqlplus", "<USER>/<PASSWORD>@<INSTANCE>" };
        ProcessBuilder builder = new ProcessBuilder(cmd);
        Process process = builder.start();
        BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
        new ReadFromConsole(br).start();
        new WriteToConsole(bw).start();
    }
}

class AbsThread extends Thread {
    boolean read = true;
    boolean write = false;
}

class ReadFromConsole extends AbsThread {

    BufferedReader processOut;

    public ReadFromConsole(BufferedReader processOut) {
        this.processOut = processOut;
    }

    @Override
    public void run() {
        while (read) {
            int i = -1;
            try {
                while ((i = processOut.read()) != -1) {
                    char ch = (char) i;
                    System.out.print(ch);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            write = true;
            read = false;
        }
    }

}

class WriteToConsole extends AbsThread {

    BufferedWriter processIn;

    public WriteToConsole(BufferedWriter processIn) {
        this.processIn = processIn;
    }

    @Override
    public void run() {
        while (write) {
            System.out.print("Enter command ");
            String cmd = new Scanner(System.in).nextLine();
            try {
                processIn.write(cmd);
                processIn.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
            read = true;
            write = false;
        }
    }
}

控制台中的输出:

SQL*Plus:2015年1月19日星期一14:07:53发布11.2.0.3.0

版权所有(c)1982、2011,Oracle。保留所有权利。

连接到:Oracle Database 11g Enterprise Edition 11.2.0.3.0版-64位生产,包括分区、Oracle标签安全、OLAP、数据挖掘和实际应用程序测试选项

SQL

程序挂在读取BLINK_CHARACTER,我尝试了read()和readLine()它不读取BLINK_CHARACTER。

如果我执行手动,则在CMD提示符中得到以下响应

C:

SQL*补充:发布11.2.0.3.0生产周一一月19 12:29:44 2015

版权所有(c)1982、2011,Oracle。保留所有权利。

连接到:Oracle Database 11g Enterprise Edition 11.2.0.3.0版-64位生产,包括分区、Oracle标签安全、OLAP、数据挖掘和实际应用程序测试选项

SQL

如何在运行时通过提供用户名和密码使其具有交互性?我还需要为Informatica流程实现同样的交互式CMD提示符。

PS:有登录选项

共有1个答案

厉钊
2023-03-14

如果您从连接字符串中删除用户名/密码和@字符,SQL*Plus将提示输入用户名/密码:

sqlplus <INSTANCE>

SQL*Plus:11.2.0.0.0版-2015年1月19日星期一14:07:53生产(c)版权所有1982,2008 Oracle Corporation。保留所有权利
输入用户名:

 类似资料:
  • 我想从cmd执行一个基于spring的jar文件。 这是我的pom。xml: 我在intelliJ中创建了一个jar文件,它运行正常,但当我这样做时:java-jar fileserver-1.0-SNAPSHOT. jar 我得到:异常在线程"主"java.lang.NoClassDefFoundError: org/springFramework/引导/SpringApplication 编辑

  • 我有一个服务器在命令窗口中运行,我希望一些代码集中到窗口中,然后输入一些东西,每2 1/2小时到3小时随机重复一次。 基本上是这样简单的: Focus CMD提示符(已打开,不想打开新的)

  • 问题内容: 如何使用MySQLdb python驱动程序执行* .sql文件中存储的sql脚本。我在尝试 但这不起作用,因为 cursor.execute 一次只能运行一个sql命令。我的sql脚本改为包含多个sql语句。我也在尝试 但也没有成功。 问题答案: 假设文件中每行有一条SQL语句。否则,您将需要编写一些规则以将行连接在一起。

  • 我有一个情况需要处理,我有我的liquibase按照推荐的最佳实践进行结构化。更改日志xml的结构如下所示 在我们的应用程序组中,我们运行updateSQL来生成统一的sql文件,并通过我们的DBA组执行更改。 如何在Liquibase ChangeLog中包含这些常见的重复语句。

  • 我想编写一个批处理文件,该文件将按给定顺序执行以下操作: 打开命令 注意:执行命令后不应关闭cmd窗口。 我试过启动命令。exe/k“cd\