The code should be database independent so I am using normal sql.
My query can change at runtime say table1 changed to table2. But lets assume for table1 query I have to update 2000 records with slot of 50, means as soon as 50 records are processed I will commit.
I have two approaches for setting values in IN clause of sql statement. I want to know which one of the below code is more efficient (priority is optimization and maintainability is secondary)?
PreparedStatement preparedStatement = sqlObj.prepareStatement( "UPDATE table1 column1=? WHERE table_id IN (" + StringUtils.repeat("?,", paramArray.length-1)+ "?)"); preparedStatement.setInt(1, 0); for(int idx = 0; idx < paramArray.length; idx++) { preparedStatement.setInt(idx+2, paramArray[idx]); } preparedStatement.executeQuery(); Or
PreparedStatement preparedStatement = sqlObj.prepareStatement( "UPDATE table1 column1=? WHERE table_id IN (?)"); for(int idx = 0; idx < paramArray.length; idx++) { preparedStatement.setInt(1, 0); preparedStatement.setInt(2, paramArray[idx]); preparedStatement.addBatch(); } preparedStatement.executeBatch(); Edit: Lets say param.length is 50 and this whole code exectutes 40 times i.e. processing 2000 records.
So in first case it will append 50 ? and then set variable for them making one update query and in second case it will create batch of 50 update queries.