Java MySQL preparedStatement Batch

时间:2013-02-05 22:58:33

标签: java mysql batch-file prepared-statement

我正在尝试使用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();

提前致谢!

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:3)

您使用的是错误的addBatch()方法。在您的代码中,您在for循环的每次迭代中都在执行prepareStatement,并且每次都会替换准备好的查询。

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