2012-08-10 17 views
3

我想在名爲Personnel-table的表中更新5用戶個人信息的字段。如何更新表中的多個字段,如果他們可能是空白的?

用戶可能想要更新所有字段,其中的一部分或根本沒有。

用戶可能要更新的字段包括:FirstNameLastNamePasswordUserNameAddress

該代碼確實是:

public boolean updateUserInfo(String _idnumber , String _usernameNew , String _passwordNew , 
     String _addressNew , String _firstNameNew , String _lastNameNew) throws SQLException 
{ 

    ResultSet resultSet = null; 

    String sqlStatement = "UPDATE PersonnelTable set `UserName` = ? WHERE `IdNumber` = ?"; 
    this.m_prepared = (PreparedStatement) this.m_connection.prepareStatement(sqlStatement); 
    this.m_prepared.executeUpdate("USE Personnel"); 

    // set the ID number & account number 


    /** 
    * first 
    */ 
    m_prepared.setString(1, _usernameNew); 
    m_prepared.setString(2, _idnumber); 

    // execute first query - update password 
    if (_usernameNew!= "") 
    { 
     resultSet = m_prepared.executeQuery(); 
     return true; 
    } 

    /** 
    * Second 
    */ 

    sqlStatement = "UPDATE PersonnelTable set `FirstName` = ? WHERE `IdNumber` = ?"; 
    this.m_prepared = (PreparedStatement) this.m_connection.prepareStatement(sqlStatement); 
    m_prepared.setString(1, _firstNameNew); 
    m_prepared.setString(2, _idnumber); 

    if (_firstNameNew != "") 
    { 
     resultSet = m_prepared.executeQuery(); 
     return true; 
    } 


    /** 
    * Third 
    */ 

    sqlStatement = "UPDATE PersonnelTable set `LastName` = ? WHERE `IdNumber` = ?"; 
    this.m_prepared = (PreparedStatement) this.m_connection.prepareStatement(sqlStatement); 
    m_prepared.setString(1, _lastNameNew); 
    m_prepared.setString(2, _idnumber); 

    if (_lastNameNew!= "") 
    { 
     resultSet = m_prepared.executeQuery(); 
     return true; 
    } 

    /** 
    * Fourth 
    */ 

    sqlStatement = "UPDATE PersonnelTable set `Address` = ? WHERE `IdNumber` = ?"; 
    this.m_prepared = (PreparedStatement) this.m_connection.prepareStatement(sqlStatement); 
    m_prepared.setString(1, _addressNew); 
    m_prepared.setString(2, _idnumber); 

    if (_addressNew!= "") 
    { 
     resultSet = m_prepared.executeQuery(); 
     return true; 
    } 



    /** 
    * Fifth 
    */ 

    sqlStatement = "UPDATE PersonnelTable set `Password` = ? WHERE `IdNumber` = ?"; 
    this.m_prepared = (PreparedStatement) this.m_connection.prepareStatement(sqlStatement); 
    m_prepared.setString(1, _passwordNew); 
    m_prepared.setString(2, _idnumber); 

    if (_passwordNew!= "") 
    { 
     resultSet = m_prepared.executeQuery(); 
     return true; 
    } 



    return false; 
} 

但你可以看到,代碼是太大了,因爲我運行查詢的5倍。

如何告訴mysql如果每個字段不是空字符串"",然後在一個mysql查詢中更新 需要的字段?這是可能的,或者我必須每次單獨做這件事?

問候

回答

5

您可以輕鬆地做到這一點在單個查詢爲:

UPDATE PersonnelTable 
SET FirstName = IF(? <> "", ?, FirstName), 
    LastName = IF(? <> "", ?, LastName), 
    Password = IF(? <> "", ?, Password), 
    UserName = IF(? <> "", ?, UserName), 
    Address = IF(? <> "", ?, Address) 
WHERE IdNumber = ?; 

如果你的字段可以有像""那麼你可以使用IF(? IS NOT NULL, ?, field_name)而不是空白空白值。

+0

您是否必須爲每個給定字段的兩個問號複製setString()調用?即,m_prepared.setString(1,_firstNameNew); m_prepared.setString(2,_firstNameNew)等... – gonzobrains

+0

哦,夥計,你是我的救星! – gonzobrains

相關問題