java - 在linux机器上从java执行mysql数据库导入脚本

标签 java jdbc

我想从 java 程序的 .sql 文件执行数据库导入。我的程序在 Windows 上运行良好。但我在 linux 机器上遇到问题。

代码-

    try {




ProcessBuilder builder = new ProcessBuilder("mysql -u root -p password db-name < db_script.sql");
            builder.redirectErrorStream(true);
            Process pr = builder.start();

            InputStream is = pr.getInputStream();

            // Now read from it and write it to standard output.
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            String line = reader.readLine();
            while (line != null) {
                System.out.println(line);
                line = reader.readLine();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

我得到 - java.io.IOException:无法运行程序“mysql -u root -p 密码 db-name < db_script.sql": java.io.IOException: error=2, 没有那个文件或目录

上述命令在 linux 终端上运行良好。 请有人就此向我提出建议。

提前致谢

最佳答案

< 重定向是一个 shell 的东西。尝试这样的事情:

ProcessBuilder builder = new ProcessBuilder("/bin/sh", "-c", "mysql -u root -p password db-name <  b_script.sql");

更新:

否则,如果您使用的是 java 7+,则可以在 java 中进行重定向:

ProcessBuilder builder = new ProcessBuilder(
        "mysql", "-u", "root", "-p", "password", "db-name");
builder.redirectInput(ProcessBuilder.Redirect.from(new File("b_script.sql")));

关于java - 在linux机器上从java执行mysql数据库导入脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8939360/

相关文章:

java - 如何使用一个路由生成器映射以不同方式编码和解码的 2 个服务?

java - 作为计划任务运行批处理文件的行为不正常?

Spring Boot 2.Hikari连接池优化

java - 卡巴斯基正在阻止 SOAP 服务响应

java - 值引擎不是对象 android.speech.tts.TextToSpeech 的成员

java - 检查新版本(更新检查)

java - 如何使用 Struts2 验证打印特定的操作错误消息?

java - 在 JDBC 中关闭后,Postgresql 连接保持空闲状态

java - JDBC 使用 SSL 连接到 Oracle 数据库

mysql - 带有 Spark 和 MySQL 元数据存储的 Hive