이번에 "Fairy : Face Diary" 앱 제작 프로젝트에서 사용자 정보 페이지를 만들면서 이름과 나이 column의 기존 데이터를 사용자가 새로 입력한 데이터로 변경하는 상황이 있었다. 예전에는 이런 상황에서 그냥 DB에 있는 데이터를 DELETE 문으로 지우고 새로운 데이터를 INSERT 문으로 채우는 방식을 사용했었다. 이번에는 이렇게 두 번 쿼리를 수행하지 않고, UPDATE 문으로 해결해보고 싶어서 방법을 찾아보게 되었다.
INSERT INTO 테이블명(KEY, COLUMN1, COLUMN2) VALUES(1, "지훈", 27)
ON DUPLICATE KEY UPDATE USERNAME = '충훈', USERAGE=30
UPDATE 테이블명 SET 컬럼명1=값1, 컬럼명2=값2 WHERE 조건식
CREATE TABLE USERDATA_T (ID INTEGER, USERNAME TEXT, USERAGE INTEGER)
private static final String TBL_USERDATA = "USERDATA_T";
private static final String COL_ID = "ID";
private static final String COL_USERNAME = "USERNAME";
private static final String COL_USERAGE = "USERAGE";
// CREATE TABLE USERDATA_T (ID INTEGER, USERNAME TEXT, USERAGE INTEGER)
private static final String SQL_CREATE_USERDATA_T =
"CREATE TABLE IF NOT EXISTS " + TBL_USERDATA + " " +
"(" +
COL_ID + " INTEGER PRIMARY KEY" + ", " +
COL_USERNAME + " TEXT" + ", " +
COL_USERAGE + " INTEGER" + ")";
public class DBHelper extends SQLiteOpenHelper {
// 중략
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_USERDATA_T);
}
}
INSERT INTO USERDATA_T VALUES (1, '지훈', 27)
// INSERT INTO USERDATA_T VALUES
private static final String SQL_INSERT_USERDATA_T =
"INSERT INTO " + TBL_USERDATA + " VALUES ";
DBHelper dbHelper;
public void insertToDB (int id, String userName, int userAge) {
dbHelper = new DBHelper();
SQLiteDatabase db = dbHelper.getWritableDatabase() ;
String query = SQL_INSERT_USERDATA_T + "(" + id + ", '" + userName + "', " + userAge + ")";
db.execSQL(query);
}
// 중략 - 코드 어디선가 호출
insertTODB(1, "지훈", 27);
UPDATE USERDATA_T SET USERNAME='충훈', USERAGE=30 WHERE ID=1
// UPDATE USERDATA_T SET
private static final String SQL_UPDATE_USERDATA_T =
"UPDATE " + TBL_USERDATA + " SET ";
public void updateToDB (int id, String userName, int userAge) {
dbHelper = new DBHelper();
SQLiteDatabase db = dbHelper.getWritableDatabase() ;
String query = SQL_UPDATE_USERDATA_T +
COL_USERNAME + "='" + userName + "', " +
COL_USERAGE + "=" + userAge + " " +
"WHERE " + COL_ID + "=" + id;
db.execSQL(query);
}
// 중략 - 코드 어디선가 호출
updateToDB(1, "충훈", 30);