[Android] SQLite 사용법 (DB 생성 및 연동, 데이터 추가, 삭제)
안드로이드에서 SQLite를 사용하여 데이터를 저장 및 관리할 수 있다.
SQLite는 MySQL나 PostgreSQL와 같은 데이터베이스 관리 시스템이지만, 서버가 아니라 응용 프로그램에 넣어 사용하는 비교적 가벼운 데이터베이스이다.
https://developer.android.com/training/data-storage/sqlite?hl=ko
ㄴ SQLite를 사용한 데이터 관리에 대한 안드로이드 공식 문서
1. SQLite DB 생성
package com.example.simple_pocket_money_entry.add;
public class TableInfo {
public static final String TABLE_NAME = "myBreakdown";
public static final String COLUMN_NAME_ID = "id";
public static final String COLUMN_NAME_TYPE = "type";
public static final String COLUMN_NAME_DATE = "date";
public static final String COLUMN_NAME_CONTENT = "content";
public static final String COLUMN_NAME_CATEGORY = "category";
public static final String COLUMN_NAME_AMOUNT = "amount";
}
테이블 정보를 따로 빼서 정리하면 테이블을 더 효율적으로 관리할 수 있다.
package com.example.simple_pocket_money_entry.add;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class DBHelper extends SQLiteOpenHelper {
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "ConsumptionList.db";
public static final String SQL_CREATE_TABLE =
"CREATE TABLE " + TableInfo.TABLE_NAME + " (" +
TableInfo.COLUMN_NAME_ID + " INTEGER PRIMARY KEY, " +
TableInfo.COLUMN_NAME_TYPE + " TEXT," +
TableInfo.COLUMN_NAME_DATE + " TEXT," +
TableInfo.COLUMN_NAME_CONTENT + " TEXT," +
TableInfo.COLUMN_NAME_CATEGORY + " TEXT," +
TableInfo.COLUMN_NAME_AMOUNT + " TEXT)";
private static final String SQL_DELETE_TABLE =
"DROP TABLE IF EXISTS " + TableInfo.TABLE_NAME;
public DBHelper(@Nullable Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SQL_DELETE_TABLE);
onCreate(db);
}
}
SQLite 데이터베이스를 생성하고 사용하려면 SQLiteOpenHelper를 extends해야 한다.
테이블을 생성할 때 쓸 SQL_CREATE_TABEL 문과 테이블을 삭제할 때 쓸 SQL_DELETE_TABLE 문을 생성한다.
이 때 작성하는 SQL문은 MYSQL의 SQL문처럼 작성해주면 된다.
참고로 SQL_CREATE_TABLE 문을 작성할 때 띄어쓰기나 큰따옴표를 잘못 입력하면 에러가 엄청나게 쏟아지니 주의해야한다.
2. SQLite DB에 데이터 추가하기(Insert)
테이블 정보(TableInfo.java)와 DB 생성에 관한(DBHelper.java) 작업을 마쳤으니, 본격적으로 SQLite DB를 사용할 차례이다.
DBHelper helper = new DBHelper(AddActivity.this);
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(TableInfo.COLUMN_NAME_TYPE, type);
values.put(TableInfo.COLUMN_NAME_DATE, date);
values.put(TableInfo.COLUMN_NAME_CONTENT, content);
values.put(TableInfo.COLUMN_NAME_CATEGORY, category);
values.put(TableInfo.COLUMN_NAME_AMOUNT, amount);
long newRowId = db.insert(TableInfo.TABLE_NAME, null, values);
if (newRowId == -1) {
customToastView("내역을 추가하지 못했습니다.");
} else {
customToastView("내역을 추가하였습니다.");
}
db.close();
위에서 만든 DBHelper를 받아 helper를 만들고, 데이터를 입력할 db를 myDBHelper. getWritableDatabase()로 선언한다.
이 메소드는, DB가없으면 OnCreate()를 선언하고, Version이 변경되면 OnUpgrade()를 선언한다.
ContentValues를 하나 선언해준다. 여기에 들어가는 데이터가 데이터베이스에 들어갈 것이다.
newRowId에는 데이터를 추가한 테이블이 몇 번 행인지 알려준다. 만약 데이터 추가에 실패했다면 결과로 -1을 반환한다.
3. SQLite DB에 있는 데이터 삭제하기(Delete)
DBHelper helper = new DBHelper(AddActivity.this);
SQLiteDatabase db = helper.getReadableDatabase();
db.execSQL("DELETE FROM " + TableInfo.TABLE_NAME);
DB에 있는 모든 데이터를 삭제한다.
특정 데이터만 삭제하는 기능 또한 db.execSQL()로 가능하다.
DB에 저장된 데이터를 GUI 툴을 사용하여 눈으로 직접 확인하고 싶다면 이 글을 참고하자.