我正在尝试仅使用JDBC更新几列。
try (Session session = getSessionFactory().openSession(); Connection connection = SessionUtil.getDBConnection(session)){
connection.setAutoCommit(false);
String query = "UPDATE Employee SET fname=?, lname=? where id=?";
prepareStatement = connection.prepareStatement(query);
for (Employee employee : employeeList) {
for(int i=1; i<=3; i++){
if(i==1){
prepareStatement.setString(i, employee.getFName());
}
else if(i==2){
prepareStatement.setString(i, employee.getLName());
}
else if(i==3){
prepareStatement.setString(i, employee.getID());
}
}
prepareStatement.addBatch();
}
prepareStatement.executeBatch();
connection.commit();
} catch (Exception e) {
e.printStackTrace();
}
在这里,我尝试仅更新表Employee中的fname和lname。 但是,当我检查从show_sql日志生成的SQL查询时,可以看到更新查询的set部分中包含所有列。
没有一种方法来限制要更新的列数。 另外,由于我只更新传递给PreparedStatement的查询中的2列,所以它不应该这样做而不是尝试更新所有列吗?
答案 0 :(得分:1)
您使用相同的setString
进行了三个i
调用,因此您用getID()
覆盖了所有列。只需放开内部for
循环,就可以了:
for (Employee employee : employeeList) {
prepareStatement.setString(1, employee.getFName());
prepareStatement.setString(2, employee.getLName());
prepareStatement.setString(3, employee.getID());
prepareStatement.addBatch();
}
prepareStatement.executeBatch();