SQL处理中的Java BatchUpdateException

时间:2012-05-15 12:38:40

标签: java mysql

以下代码给出了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行

所以在上次更新中我似乎错过了一些数据。我想写的数据确实令人兴奋(我用系统打印线检查过。

任何建议都会受到欢迎。

2 个答案:

答案 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是您的表的名称,而您实际上并没有尝试将数据插入索引中??

最后,不确定在声明结尾处是否需要;?在构建这样的代码时通常不需要它,因此可以先尝试不使用它,如果还有问题,可以稍后再添加。