Ikki
Ikki

Reputation: 227

Java MySQL preparedStatement Batch

I am trying to use the preparedStatement Batch but I am having a problem.

The following code does not give me errors, but it inserts in the table only last key of the map and I do not know why.

It will be surely a very stupid error, but this is the first time I use the addBatch() method..

        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();

Thanks in advance!

Upvotes: 1

Views: 3099

Answers (2)

Miguel Prz
Miguel Prz

Reputation: 13792

You are using the addBatch() method wrong. In your code you are doing the prepareStatement in each iteration of for loop, and this replaces the prepared query each time.

You should only be calling prepareStatement once per batch. You should place the prepared statement before the loop (only one call)

Upvotes: 3

PermGenError
PermGenError

Reputation: 46408

Prepare your Statement and query outside of the loop:

      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();

Upvotes: 6

Related Questions