3
我想在名爲Personnel-table
的表中更新5
用戶個人信息的字段。如何更新表中的多個字段,如果他們可能是空白的?
用戶可能想要更新所有字段,其中的一部分或根本沒有。
用戶可能要更新的字段包括:FirstName
,LastName
,Password
,UserName
和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倍。
如何告訴mysql如果每個字段不是空字符串""
,然後在一個mysql查詢中更新 需要的字段?這是可能的,或者我必須每次單獨做這件事?
問候
您是否必須爲每個給定字段的兩個問號複製setString()調用?即,m_prepared.setString(1,_firstNameNew); m_prepared.setString(2,_firstNameNew)等... – gonzobrains
哦,夥計,你是我的救星! – gonzobrains