当我使用SQL更新时,如果某个字段为空,则会在数据库中将该值更改为空

时间:2017-06-30 22:46:19

标签: mysql java

我有一个包含6列的表:userid,firstname,lastname,title,squad和email。当我只想更新其中一个时,我只会在相应的文本字段中输入文本。例如,如果我想更新firstname,我只会写新的名字,而我不会为lastname,title等添加任何内容。

问题在于,当我没有为其他文本字段添加任何内容时,数据库假定我想要将这些值更新为空,当我运行数据库时,那里什么都没有了。我该如何解决这个问题?

String ID = textID.getText();
String first = textFirstName.getText();
String last = textLastName.getText();
String title = textTitle.getText();
String squad = textSquad.getText();
String email = textEmail.getText();

int newID = Integer.parseInt(ID);
int newSquad = Integer.parseInt(squad);

try {  
    if(first != null) {
        String sql = "Update colleagues " + "set firstname = ? " + "where userid = ?";
        PreparedStatement upd = myConn.prepareStatement(sql);

        upd.setString(1, first); // replace first ? with value for first name
        upd.setInt(2, newID);    // replace second ? with value for userid
        upd.executeUpdate();    
    }

    if(last != null) {
        String sql = "Update colleagues " + "set lastname = ? " + "where userid = ?";
        PreparedStatement upd = myConn.prepareStatement(sql);

        upd.setString(1, last); 
        upd.setInt(2, newID);    
        upd.executeUpdate();
    }
// ...

2 个答案:

答案 0 :(得分:0)

而不是比较

(first != null)

first的值与空值进行比较(我想,getText()函数永远不会返回该值),您应该进行比较

(!("".equals(first))

请参阅Comparing a string with the empty string (Java)

BTW:这不再是关于数据库的问题,而是关于Java编程的问题。最好在stackoverflow中回答,而不是DBA.SE

答案 1 :(得分:0)

我认为处理此类检查的最佳方法是使用经过测试的开源和生产就绪库,您可以完全信任apache common-lang3。 有很多utils类可以用于那些“简单”的任务,所以你不必自己重写它们。