4

5というテーブルのユーザーの個人情報のフィールドを更新したいと考えていますPersonnel-table

ユーザーは、すべてのフィールドまたは一部のフィールドを更新したい場合もあれば、何も更新したくない場合もあります。

ユーザーが更新する可能性があるフィールドはFirstName、 、LastNamePasswordUserName およびAddressです。

そのコードはそれを行います:

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 回実行しているため、コードが大きすぎます。

""各フィールドが空の文字列でない場合、1 つの mysql-query で必要なフィールドを更新することを mysql に伝えるにはどうすればよいですか? それは可能ですか、それとも毎回別々に行う必要がありますか?

よろしく

4

1 に答える 1

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)

于 2012-08-10T06:01:10.743 に答える