以下代码给出了BatchUpdateException
,我不明白为什么。
public void createContactmoment(Document document) {
try {
c = MySqlDAOFactory.getInstance().getConnection();
//
c.setAutoCommit(false);
//
String sql = "insert into index(iddocument,chapter,chapterdate)"
+ "values (?,?,?)";
//
prest = c.prepareStatement(sql);
//
int count = 1;
//Formatter for the time
DateTimeFormatter format = DateTimeFormat.forPattern("dd-MM-yyyy");
//
while (count <= Integer.parseInt(document.getTeachingWeeks())
|| count == document.getAllDates().size()
|| count == document.getContactMomentList().size()) {
//
if (MysqlDocumentDAO.getInstance().findByName(
document.getName()) == -1)
return;
//
prest.setInt(1,MysqlDocumentDAO.getInstance().findByName(
document.getName()));
if (document.getContactMomentList().get(count) != null)
prest.setString(2,document.getContactMomentList().get(count));
else
prest.setString(2, "No contactmoment found, but expected");
//
if (document.getAllDates().get(count) != null)
prest.setString(3,(format.print(document.getAllDates().get(count))));
else
prest.setString(3, "Na date found, but expected");
//
prest.addBatch();
//
count++;
}
//
prest.executeBatch();
c.commit();
//
} catch (SQLException e) {
JdbcLogging.info("Dit trad op bij het uitvoeren van de batchtaak (contactMoments)"+ " :" + e);
} finally {
MySqlConnectionFactory.getInstance().closeStatement(prest);
MySqlConnectionFactory.getInstance().closeConnection(c);
}
}
我在日志中看到的错误是:
INFO JdbcLogging:25 - Dit trad op bij het uitvoeren van de batchtaak(contactMoments):java.sql.BatchUpdateException:SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在'index(iddocument,chapter,chapterdate)值附近使用正确的语法(44,'Examen; * Verdedigen project',''在第1行
所以在上次更新中我似乎错过了一些数据。我想写的数据确实令人兴奋(我用系统打印线检查过。
任何建议都会受到欢迎。
答案 0 :(得分:3)
index
是保留字,不应该用于表名。在你的查询中将“index
”放在`back quotes` 中并执行然后它应该正常工作。
String sql = "insert into `index`(iddocument,chapter,chapterdate) values (?,?,?)";
答案 1 :(得分:1)
尝试在两条SQL行之间添加空格 - )
和单词values
应该分开......
String sql = "insert into index (iddocument,chapter,chapterdate) "
+ "values (?,?,?)";
同样,尝试在index
和(
之间添加空格也没有什么坏处 - 它只取决于SQL解释器的挑剔程度。
此外,index
是表的错误名称,因为索引在许多数据库中具有特殊含义。我假设index
是您的表的名称,而您实际上并没有尝试将数据插入索引中??
最后,不确定在声明结尾处是否需要;
?在构建这样的代码时通常不需要它,因此可以先尝试不使用它,如果还有问题,可以稍后再添加。