9

I need to insert multiple rows into SQL Server database (100 at a time) from my Java code. How can I do this? Currently I am inserting one by one and this does not look efficient.

0

3 Answers 3

17

You can use PreparedStatement#addBatch() to create a batch and executeBatch() to execute it.

Connection connection = null;
PreparedStatement statement = null;
try {
    connection = database.getConnection();
    statement = connection.prepareStatement(SQL);
    for (int i = 0; i < items.size(); i++) {
        Item item = items.get(i);
        statement.setString(1, item.getSomeValue());
        // ...
        statement.addBatch();
        if ((i + 1) % 100 == 0) {
            statement.executeBatch(); // Execute every 100 items.
        }
    }
    statement.executeBatch();
} finally {
    if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
    if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
}

See also:

Sign up to request clarification or add additional context in comments.

2 Comments

in this approach if one record from the batch fails what will happen..? will the records after the failed record be inserted...how do i make sure that except the record that fails all other records be inserted...?
That actually depends on the driver used. See executeBatch() javadoc.
2

Use a batch.

Check out the addBatch(), executeBatch(), etc. methods of Java's Statement

For a simple example, check here (but I would suggest using a PreparedStatement)

2 Comments

is there a batch statement in sql server or do i need to use a api...?
@Kaddy - I would recommend doing it on the Java side with a batch using PreparedStatement
1

You can pass one very long string to SQL with multiple inserts as one statement to SQL Server. This won't work if you're doing parameterized queries, though. And concatenated SQL strings are "Generally a Bad Idea."

You might be better off looking at the BULK INSERT command. It has the problem of being rigid about column orders and such. But its WAY FAST!!

2 Comments

i cant use this because i dont have a file...thanks anyways...
yeah, its a PITA to write the file and such, but its a good command to be aware of. :)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.