【问题标题】:Importing a sql dump to Eclipse将 sql 转储导入 Eclipse
【发布时间】:2011-12-05 14:03:51
【问题描述】:
我从 MySQl Workbench 导入了一个转储的 sql 文件,但是当我尝试在 Eclipse 中运行时,我不断收到此错误消息。
SQLException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS /; 附近使用正确的语法
/!40101 SET @OLD_COL' 在第 8 行
但是当我将相同的信息复制到 MySQL 中时,它会创建架构并且一切正常。我做错了什么?
这是我的 java 代码:
http://pastebin.com/B1RVMYUd
如果您需要,这里是转储文件:
http://pastebin.com/RWpG0BEX
【问题讨论】:
标签:
java
mysql
sql
eclipse
【解决方案2】:
您将转储的全部内容作为单个 SQL 语句执行。尝试使用; 作为分隔符拆分文件内容(您的sql 字符串),并分别执行每个语句。
(顺便说一句,最好将调用 statement.close/conn.close 放在 finally 子句中,以确保始终释放资源。)
【解决方案3】:
我是初学者,所以我的 cmets 可能不是最清晰或最准确的,我的代码也不是最清晰、简洁、正确等。除此之外,这里有几件事:
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) 去掉 cmets。
2) 将分号作为文件的第一个字符(即,第 1 行,第 1 列)。
我做到了,它有效。如果您想要我的完整代码,请告诉我,我会发布它。
干杯,
克里斯