我从MySQl Workbench导入了一个转储的sql文件,但是当我尝试在Eclipse中运行时,我不断收到此错误消息。
SQLException:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'SET @OLD_CHARACTER_SET_RESULTS = @@ CHARACTER_SET_RESULTS /附近使用正确的语法; / !40101在第8行设置@OLD_COL'
但是当我将相同的信息复制到MySQL中时,它会创建模式并且一切正常。我做错了什么?
这是我的java代码: http://pastebin.com/B1RVMYUd
如果你需要它,那么是dumpfile: http://pastebin.com/RWpG0BEX
答案 0 :(得分:0)
你好,最好在mysql语句中的查询中上传转储
答案 1 :(得分:0)
您可以将转储的全部内容作为单个SQL语句执行。尝试使用sql
作为分隔符拆分文件内容(您的;
字符串),并分别执行每个语句。
(顺便说一句,最好将statement.close
/ conn.close
的调用放在finally
子句中,以确保资源始终被释放。)
答案 2 :(得分:0)
我是初学者,所以我的评论可能不是最明确或最准确,也不是我的代码最清晰,最简洁,最正确等等。有了这些,这里有一些事情:
1)您不能使用executeQuery(sql)方法来创建。所以使用其他选项之一。在我的实验中,我使用了:
sqlDumpArray = sqlDump.split(";");
for (int i = 0; i < sqlDumpArray.length; i++) {
System.out.println("\nsqlDumpArray[" + i + "] is: " + sqlDumpArray[i]); // To see what's in the array.
}
for (int j = 1; j < sqlDumpArray.length -1; j++) { // Ugly hack because sqlDumpArray[0] and sqlDumpArray.length-1 are problematic in this alpha version of code.
try {
Statement statement = conn.createStatement();
statement.addBatch(sqlDumpArray[j]);
statement.executeBatch(); // Maybe could move this out of the for-loop.
}
关于SQL文件:
1)删除评论。 2)将分号作为文件的第一个字符(即第1行,第1列)。
我做到了,它有效。如果您需要我的完整代码,请告诉我,我会发布它。
干杯, 克里斯