1

PreparedStatement Batch を使用しようとしていますが、問題が発生しています。

次のコードではエラーは発生しませんが、マップの最後のキーのみがテーブルに挿入され、その理由はわかりません。

確かに非常にばかげたエラーになるでしょうが、addBatch() メソッドを使用するのはこれが初めてです..

        Class.forName("com.mysql.jdbc.Driver");
        this.connect = DriverManager.getConnection("jdbc:mysql://localhost/" + this.database + "?user=" + this.user + "&password=" + this.password);
        String s;
        for (String key : this.map.keySet())
        {
            s = ("insert into " + this.database + ".user (nickname) values (?)");
            this.preparedStatement = this.connect.prepareStatement(s);
            this.preparedStatement.setString(1, key);
            this.preparedStatement.addBatch();
        }

        this.preparedStatement.executeBatch();

前もって感謝します!

4

2 に答える 2

6

ステートメントとクエリをループ外で準備します。

      s = ("insert into " + this.database + ".user (nickname) values (?)");
      this.preparedStatement = this.connect.prepareStatement(s);
      for (String key : this.map.keySet())
        {
            this.preparedStatement.setString(1, key);
            this.preparedStatement.addBatch();
        }
        this.preparedStatement.executeBatch();
于 2013-02-05T23:03:14.660 に答える
3

addBatch() メソッドを間違って使用しています。コードでは、 for ループの各反復で prepareStatement を実行しています。これにより、準備されたクエリが毎回置き換えられます。

バッチごとに 1 回だけ prepareStatement を呼び出す必要があります。ループの前に準備済みステートメントを配置する必要があります (1 回の呼び出しのみ)

于 2013-02-05T23:03:25.610 に答える