在Windows中使用java导入sql文件到mysql数据库的错误

这是我的代码

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 syntex中有错误

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

谢谢

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

你有两个选择:

  • 您可以使用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命令会被阻塞,因为它不能再写入你没有阅读的管道。

控制台显示错误:您的sql syntex中有错误

这可能是说实话…


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