JDBC更新查询更新所有列,而实际上我仅更新几列

时间:2019-06-27 18:25:47

标签: java database jpa jdbc prepared-statement

我正在尝试仅使用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列,所以它不应该这样做而不是尝试更新所有列吗?

1 个答案:

答案 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();         
相关问题