java - 如何使用 ProcessBuilder 运行 MySQL 脚本?

标签 java mysql

我有一个 SQL 脚本,我想从一个在 Windows 上运行的 Java 类中执行。我目前正在尝试在以下函数中使用 ProcessBuilder 来执行此操作:

public static boolean runSqlScript(String filename, String user, String password) {
    ProcessBuilder pb = new ProcessBuilder("mysql", "-u"+user, "-p"+password, "< "+ filename);
    try {
        Process pr = pb.start();
        BufferedReader errors = new BufferedReader(new InputStreamReader(pr.getErrorStream()));
        BufferedReader output = new BufferedReader(new InputStreamReader(pr.getInputStream()));
        while (pr.isAlive()) {
            try {
                System.err.println(errors.readLine());
                System.out.println(output.readLine());
                Thread.sleep(10);
            } catch (InterruptedException e) {
                break;
            }
        }
        System.err.println(errors.readLine());
        System.out.println(output.readLine());

        int status = pr.exitValue();
        return (status == 0);
    } catch (IOException e) {
        System.err.println("Error running command: " + e.getMessage());
        return false;
    }
}

文件名是脚本的绝对路径,用户和密码验证正确。但是当我运行它时,我得到了错误:

ERROR 1102 (42000): Incorrect database name '< c:/path/to/script.sql'

为什么将其解释为数据库名称而不是命令行参数?我可以使用 ProcessBuilder 来运行这样的脚本吗?

最佳答案

您需要添加数据库名称,它会起作用ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "mysql", "-u"+user, "-p"+password,"dbname", " < "+ filename);

关于java - 如何使用 ProcessBuilder 运行 MySQL 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37947148/

相关文章:

Java webservlet API : HTTP 400 error - bad request

java - 无法创建 ValueProxy

java - 为什么我的实时结果没有在 main 中更新?

mysql - CannotAcquireLockException(Spring、Hibernate、MySQL)

mysql - 与云计算实例共享localhost mysql数据库

java - 使用 Java 的 File.delete() 方法

java - 如何使用带有 java 代码的 UMLet 创建序列图

mysql - perl DBI无密码连接mysql数据库

mysql - 使用 MySql 获取季度最后一个月的最后一个工作日

mysql - memcache 会帮助处理昂贵的 MySQL 查询吗? (Drupal 站点)