Reputation: 5645
Is this the correct syntax for a prepared statement in java:
INSERT INTO table (id, version, data)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE
data = IF(version > values(version), data, values(data)),
version = IF(version > values(version), version, values(version))
I am looking for the best way to insert or update millions of rows from within a for-loop in java taking advantage of PreparedStatement's addBatch.
Upvotes: 1
Views: 3547
Reputation: 50087
If the SQL statement is correct, you need to wrap it as follows:
String sql = ...
PreparedStatement prep;
prep = conn.prepareStatement(sql);
prep.setInt(1, x);
prep.setString(2, y);
prep.setString(3, z);
prep.execute();
To use addBatch, use:
String sql = ...
PreparedStatement prep;
prep = conn.prepareStatement(sql);
for (...) {
prep.setInt(1, x);
prep.setString(2, y);
prep.setString(3, z);
prep.addBatch();
}
prep.execute();
Upvotes: 3