안드로이드 애플리케이션 개발에서 데이터 저장은 필수적인 요소입니다. 사용자의 데이터를 안전하게 보관하기 위해 다양한 저장 방식을 사용할 수 있지만, 그 중에서도 데이터베이스가 가장 보편적으로 사용됩니다. 이번 글에서는 안드로이드에서 자바를 활용하여 SQLite 데이터베이스를 생성하고 데이터를 CRUD(생성, 읽기, 업데이트, 삭제)하는 방법을 자세히 알아보겠습니다.
1. 데이터베이스란?
데이터베이스는 정보를 조직적으로 저장 및 관리하는 시스템입니다. 안드로이드에서는 주로 관계형 데이터베이스인 SQLite를 사용합니다. SQLite는 경량형 데이터베이스로, 소형 애플리케이션에 적합하며, 파일 기반으로 동작하여 별도의 서버 없이 간단하게 사용할 수 있습니다.
2. SQLite 데이터베이스 설정하기
안드로이드 프로젝트를 생성한 후, SQLite 데이터베이스를 설정해야 합니다. 데이터베이스를 생성하고 관리하기 위한 헬퍼 클래스를 작성하는 것이 일반적입니다.
package com.example.myapp.database;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "myApp.db";
public static final String TABLE_NAME = "users";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_NAME = "name";
public static final String COLUMN_EMAIL = "email";
private static final String TABLE_CREATE =
"CREATE TABLE " + TABLE_NAME + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_NAME + " TEXT, " +
COLUMN_EMAIL + " TEXT);";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
}
3. 데이터 삽입하기
데이터를 데이터베이스에 추가하기 위해서는 SQLiteDatabase 객체를 사용하여 insert() 메소드를 호출합니다. 아래 예제는 사용자 정보를 데이터베이스에 추가하는 방법을 보여줍니다.
package com.example.myapp.database;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
public class UserRepository {
private DatabaseHelper dbHelper;
public UserRepository(Context context) {
dbHelper = new DatabaseHelper(context);
}
public void addUser(String name, String email) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DatabaseHelper.COLUMN_NAME, name);
values.put(DatabaseHelper.COLUMN_EMAIL, email);
db.insert(DatabaseHelper.TABLE_NAME, null, values);
db.close();
}
}
4. 데이터 조회하기
저장된 데이터를 조회하기 위해서는 query() 메소드를 사용합니다. 이 메소드는 Cursor 객체를 반환하며, Cursor를 통해 데이터에 접근할 수 있습니다.
package com.example.myapp.database;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
public class UserRepository {
// ... (기존 코드)
public List getAllUsers() {
List users = new ArrayList<>();
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query(DatabaseHelper.TABLE_NAME, null, null, null, null, null, null);
if (cursor.moveToFirst()) {
do {
User user = new User();
user.setId(cursor.getInt(cursor.getColumnIndex(DatabaseHelper.COLUMN_ID)));
user.setName(cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_NAME)));
user.setEmail(cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_EMAIL)));
users.add(user);
} while (cursor.moveToNext());
}
cursor.close();
db.close();
return users;
}
}
5. 데이터 업데이트하기
기존 데이터를 업데이트하는 방법은 update() 메소드를 사용합니다. 아래 예에서는 특정 사용자의 이메일을 변경하는 방법을 보여 줍니다.
package com.example.myapp.database;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
public class UserRepository {
// ... (기존 코드)
public void updateUser(int id, String email) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DatabaseHelper.COLUMN_EMAIL, email);
db.update(DatabaseHelper.TABLE_NAME, values, DatabaseHelper.COLUMN_ID + " = ?", new String[]{String.valueOf(id)});
db.close();
}
}
6. 데이터 삭제하기
특정 데이터를 삭제하려면 delete() 메소드를 사용합니다. 아래 예제에서는 특정 사용자 데이터를 삭제하는 방법을 설명합니다.
package com.example.myapp.database;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
public class UserRepository {
// ... (기존 코드)
public void deleteUser(int id) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete(DatabaseHelper.TABLE_NAME, DatabaseHelper.COLUMN_ID + " = ?", new String[]{String.valueOf(id)});
db.close();
}
}
7. 전체 코드 예제
위의 모든 메소드를 포함한 전체 예제를 아래와 같이 최종적으로 컴파일할 수 있습니다.
package com.example.myapp.database;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
public class UserRepository {
private DatabaseHelper dbHelper;
public UserRepository(Context context) {
dbHelper = new DatabaseHelper(context);
}
public void addUser(String name, String email) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DatabaseHelper.COLUMN_NAME, name);
values.put(DatabaseHelper.COLUMN_EMAIL, email);
db.insert(DatabaseHelper.TABLE_NAME, null, values);
db.close();
}
public List getAllUsers() {
List users = new ArrayList<>();
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query(DatabaseHelper.TABLE_NAME, null, null, null, null, null, null);
if (cursor.moveToFirst()) {
do {
User user = new User();
user.setId(cursor.getInt(cursor.getColumnIndex(DatabaseHelper.COLUMN_ID)));
user.setName(cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_NAME)));
user.setEmail(cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_EMAIL)));
users.add(user);
} while (cursor.moveToNext());
}
cursor.close();
db.close();
return users;
}
public void updateUser(int id, String email) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DatabaseHelper.COLUMN_EMAIL, email);
db.update(DatabaseHelper.TABLE_NAME, values, DatabaseHelper.COLUMN_ID + " = ?", new String[]{String.valueOf(id)});
db.close();
}
public void deleteUser(int id) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete(DatabaseHelper.TABLE_NAME, DatabaseHelper.COLUMN_ID + " = ?", new String[]{String.valueOf(id)});
db.close();
}
}
8. 종합 및 결론
이번 강좌를 통해 안드로이드에서 SQLite 데이터베이스를 사용하여 기본적인 CRUD 작업을 수행하는 방법을 배웠습니다. 데이터베이스는 앱에서 데이터를 관리하는 데 필수적인 역할을 하며, SQLite는 특히 안드로이드 환경에서 많이 사용됩니다. 더 복잡한 데이터 저장소가 필요한 경우 Room Persistence Library를 사용하는 것도 고려할 수 있습니다. Room은 SQLite 데이터베이스에 대한 추상화 레이어를 제공하여 데이터베이스 작업을 더 쉽게 만들어줍니다.