반응형
Android 공식 개발자 홈페이지에서도 SQLite대신 ROOM을 사용하는것을 적극 권장하고 있습니다.
ROOM을 적극권장하는 내용은 아래와 같습니다
- SQLite는 쿼리에 대한 에러를 컴파일시 확인할 수 없다. (ROOM은 확인 가능)
- SQLite는 스키마가 변경되면 수동으로 SQL쿼리를 업데이트 해야한다. (ROOM은 자동으로 해줌)
- SQLite는 java 데이터 객체를 변경하려면 많은 boilerplate코드를 사용해야 한다 (ROOM은 필요 없음)
- SQLite는 LiveData나 RxJava를 위해 Observation으로 생성해 동작할 수 없다 (ROOM은 할 수 있음)
물론 간단한 사용엔 이만한 DB가 없긴 합니다. ㅎ 그렇기에 SQLite을 먼저 포스팅 해보겠습니다.
1. SQLite를 사용하기 위해 클래스 생성
SQLiteOpenHelper를 상속받는 클래스를 만듭니다
public class MemberInfo extends SQLiteOpenHelper {
public MemberInfo(Context context){
super(context, "MemberInfo.db", null, 1);
};
@Override
public void onCreate(SQLiteDatabase db) {
String query = "CREATE TABLE member (id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"username TEXT, userid TEXT, password INTEGER)";
db.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String query = "DROP TABLE IF EXISTS member";
db.execSQL(query);
onCreate(db);
}
}
생성자의 매개변수
- context : 데이터베이스 경로탐색에 사용합니다.
- name : 데이터베이스 파일의 이름입니다.
- factory : 커서객체를 만드는데 사용하고, 기본값은 null 입니다. 커서는 쿼리실행시 생성할것이므로 null로 입력했습니다.
- version : 임의로 지정하는 정수형 타입 변수입니다. 해당 데이터베이스의 버전을 구분하는데 사용합니다.
2. 데이터 베이스 선언
MemberInfo memberInfo = new MemberInfo(MainActivity.this);
이렇게 선언하면 MemberInfo클래스에 작성해둔 OnCreate를 실행해 줍니다.
테이블을 만드는데 중복검사를 안하는 이유는 이미 테이블이 있다면 쿼리가 자동으로 실패하기 때문에 작성하지 않았습니다.
3. 쿼리 사용전 준비
SQLiteDatabase db
SQLiteDatabase의 인스턴스를 생성해 사용합니다.
4. Select
try {
db = memberInfo.getReadableDatabase();
String query = "SELECT username, userid, password FROM member";
StringBuffer stringBuffer = new StringBuffer();
Cursor cursor = db.rawQuery(query, null);
while(cursor.moveToNext()){
String username = cursor.getString(0);
String suerid = cursor.getString(1);
int password = cursor.getInt(2);
//...
}
cursor.close();
memberInfo.close();
} catch (Exception e){
e.printStackTrace();
}
5. Insert
try {
db = memberInfo.getWritableDatabase();
String query = "INSERT INTO member(username, userid, password)
VALUES ('홍길동', 'hkdong', '1234')";
db.execSQL(query);
memberInfo.close();
}catch (Exception e){
e.printStackTrace();
}
6. Update
try {
db = memberInfo.getWritableDatabase();
String query = "UPDATE member SET username = '임꺽정' WHERE userid = 'hkdong'";
db.execSQL(query);
memberInfo.close();
}catch (Exception e){
e.printStackTrace();
}
7. Delete
try{
db = myIno.getWritableDatabase();
String query = "DELETE FROM member WHERE userid = 'hkdong'";
db.execSQL(query);
myIno.close();
} catch (Exception e){
e.printStackTrace();
}
참고한 사이트
https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper
https://developer.android.com/training/data-storage/room?hl=ko
반응형
'IDE & Framework > Android' 카테고리의 다른 글
[Kotlin] retrofit2 간단한 사용법 (0) | 2021.10.17 |
---|---|
[Android] SHA-1 쉽게 찾는법 (0) | 2021.10.17 |
AsyncTask는 왜 deprecated 되었을까? (0) | 2021.07.09 |
Retrofit2 간단한 사용법 (0) | 2021.06.29 |
Recycler View item handeling (0) | 2021.06.21 |