gpt4 book ai didi

java - 在Windows中使用java将sql文件导入mysql数据库时出错

转载 作者:可可西里 更新时间:2023-11-01 11:21:05 25 4
gpt4 key购买 nike

这是我的代码

try{   
String logf = "mysql -p -h localhost ruralcdn<E:\\data\\DBServer\\"+FileName;
System.out.println("Command"+logf);
Runtime rt = Runtime.getRuntime();

Process pr = rt.exec(logf);
int lm = pr.waitFor();
System.out.println("lm"+lm);

System.out.println("!!Done!!");
}catch(Exception ex){
System.out.println("!!error!!");

}

当我编译上面的代码时,它会无限期地挂起,并且我的数据库中没有任何条目更新。当我尝试使用下面给出的方法时

Connection conn = dbConnectionSource.getConnection();
Statement stmt = conn.createStatement();
stmt.execute(FileUtils.readFileToString(new File("./some-sql-file")));

控制台显示错误:你的sql语法有错误

请帮助我,以便我可以正确地做事。

谢谢-A

最佳答案

您的命令(在 logf 中)包括标准输入的重定向。不幸的是,您不能那样做,因为 Process.exec(String) 方法不理解如何执行命令重定向、引用和 sso on。它只理解如何执行一个简单的命令,参数以空格分隔。

你有两个选择:

  • 您可以用 Java 打开该文件,并将其写入流程对象的输出流,以便它显示在命令标准输入中。

  • 您可以告诉 Java 在可以处理重定向等的 shell/命令解释器中运行 mysql 命令。


您的代码应如下所示:

String[] command = new String{
"cmd",
"/c",
"mysql -p -h localhost ruralcdn < E:\\data\\DBServer\\" + fileName;

ProcessBuilder pb = new ProcessBuilder(command);
Process p = pb.start();
p.waitFor();

您的代码应该做的另一件事是读取和显示(或丢弃)命令的标准输出/错误。如果您不阅读它:

  • 您不会知道它是否包含任何错误消息,并且
  • mysql 命令有可能会阻塞,因为它无法再向您尚未读取的管道写入任何内容。

console displayed error:you have an error in your sql syntex

这大概是实话实说...


顺便说一下,mysql 命令目前永远挂起的原因是它正在等待 Java 进程在其标准输入上向它发送数据。这不会发生,因为您的 Java 代码不会向它写入任何内容。

关于java - 在Windows中使用java将sql文件导入mysql数据库时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10462826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com