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에 알릴 수 있습니까? 그렇게 할 수 있을까요? 아니면 매번 따로해야합니까? 당신의 필드는 다음 대신 빈의 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 = ?;
:
안부
주어진 필드마다 두 개의 물음표에 대해 setString() 호출을 복제해야합니까? 즉, m_prepared.setString (1, _firstNameNew); m_prepared.setString (2, _firstNameNew) 등 ... – gonzobrains
오, 이봐, 너 내 구세주 야! – gonzobrains