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,这每次都会替换准备好的查询。

您应该每批只调用一次 prepareStatement 。您应该将准备好的语句放在循环之前(只有一次调用)

于 2013-02-05T23:03:25.610 回答