0

下面的代码给出了一个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 服务器版本相对应的手册,以在第 1 行的 'index(iddocument,chapter,chapterdate)values (44,'Examen; * Verdedigen project','' 附近使用正确的语法

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

任何建议都会更受欢迎。

4

2 回答 2

3

index是保留字,不应用作表名。在您的查询中,将单词 ` index` 放在`back 引号` 中并执行,然后它应该可以工作。

String sql = "insert into `index`(iddocument,chapter,chapterdate) values (?,?,?)";
于 2012-05-15T12:49:01.957 回答
1

尝试在 2 个 SQL 行之间添加一个空格 -)和单词values应该分开......

String sql = "insert into index (iddocument,chapter,chapterdate) "
           + "values (?,?,?)";

同样,尝试在indexand之间添加一个空格也没有什么坏处(——它只取决于 SQL 解释器的挑剔程度。

此外,index对于表来说,这是一个不好的名称,因为索引在许多数据库中具有特殊含义。我假设这index是您的表的名称,您实际上并没有尝试将数据插入索引!?

最后,不确定;语句末尾是否需要 a?在构建这样的代码时通常不需要它,所以可以先尝试不使用它,如果仍然有问题,可以稍后添加它。

于 2012-05-15T12:49:34.213 回答