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構文にエラーがあります。1行目の「index(iddocument、chapter、chapterdate)values(44、'Examen; * Verdedigenproject'」」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

したがって、前回の更新では、いくつかのデータが欠落しているようです。書き込みたいデータは存在します(システムプリントラインで確認しました)。

どんな提案でも大歓迎です。

4

2 に答える 2

3

indexは予約語であり、テーブル名には使用しないでください。クエリで` index`という単語を` backquotes`に入れて実行すると、機能するはずです。

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 (?,?,?)";

同様に、との間にスペースを追加しようとしても問題はありませんindex。SQL(インタープリターがどれだけうるさいかによって異なります。

また、indexインデックスは多くのデータベースで特別な意味を持つため、テーブルの名前としては不適切です。それindexがあなたのテーブルの名前だと思います、そしてあなたは実際にデータをインデックスに挿入しようとはしていません!?

;最後に、ステートメントの最後にが必要かどうかわかりませんか?通常、このようなコードを作成する場合は必要ないため、最初にコードを使用せずに試してみてください。それでも問題が解決しない場合は、後で追加してください。

于 2012-05-15T12:49:34.213 に答える