2012-08-10 6 views
3

Personnel-table이라는 테이블에서 사용자 개인 정보 필드 인 5을 업데이트하고 싶습니다.테이블에서 여러 필드를 비워 둘 수있는 경우이를 업데이트하는 방법은 무엇입니까?

사용자는 모든 필드의 일부 또는 전부를 업데이트하려고 할 수 있습니다. 사용자가 업데이트 할 수 있습니다

필드는 다음과 같습니다 FirstName, LastName, Password, UserNameAddress.

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에 알릴 수 있습니까? 그렇게 할 수 있을까요? 아니면 매번 따로해야합니까? 당신의 필드는 다음 대신 빈의 IF(? IS NOT NULL, ?, field_name)을 사용할 수 있습니다 ""처럼 빈 값을 가질 수 있다면

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

:

안부

답변

5

쉽게 같은 단일 쿼리에서이 작업을 수행 할 수 있습니다.

+0

주어진 필드마다 두 개의 물음표에 대해 setString() 호출을 복제해야합니까? 즉, m_prepared.setString (1, _firstNameNew); m_prepared.setString (2, _firstNameNew) 등 ... – gonzobrains

+0

오, 이봐, 너 내 구세주 야! – gonzobrains

관련 문제