안드로이드 DB 저장 관리 방법
2023. 12. 9. 22:31ㆍ카테고리 없음
1, SQLite 데이터베이스
- 안드로이드에서 기본으로 제공되는 경량의 내장 관계형 데이터베이스
- SQLiteOpenHelper 클래스를 사용하여 데이터베이스 생성, 관리
- SQL 쿼리를 사용하여 대이터를 조작
// 데이터베이스 생성 및 버전 관리를 담당하는 Helper 클래스
public class DBHelper extends SQLiteOpenHelper {
// 생성자
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// 데이터베이스 생성시 호출
@Override
public void onCreate(SQLiteDatabase db) {
// 테이블 생성 SQL 실행
db.execSQL(CREATE_TABLE_QUERY);
}
// 데이터베이스 업그레이드시 호출
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 기존 테이블 삭제 및 새로운 테이블 생성 등 업그레이드 로직 수행
}
}
데이터베이스에 정보 삽입
// 쓰기모드로 DATA REPOSITORY에 접근
SQLiteDatabase db = dbHelper.getWritableDatabase();
// map을 생성
ContentValues values = new ContentValues();
values.put(FeedEntry.COLUMN_NAME_TITLE, title);
values.put(FeedEntry.COLUMN_NAME_SUBTITLE, subtitle);
// 새로운 값을 (ROW에)삽입
long newRowId = db.insert(FeedEntry.TABLE_NAME, null, values);
데이터베이스에서 정보 읽기
SQLiteDatabase db = dbHelper.getReadableDatabase();
//DB의 어떤 column인지
String[] projection = {
BaseColumns._ID,
FeedEntry.COLUMN_NAME_TITLE,
FeedEntry.COLUMN_NAME_SUBTITLE
};
// 이름이 'My Title' 인 것을 찾아
String selection = FeedEntry.COLUMN_NAME_TITLE + " = ?";
String[] selectionArgs = { "My Title" };
// 결과를 어떻게 보여줄 것인가
String sortOrder =
FeedEntry.COLUMN_NAME_SUBTITLE + " DESC";
Cursor cursor = db.query(
FeedEntry.TABLE_NAME, // 쿼리 테이블
projection, //
selection,
selectionArgs,
null, // rows를 그룹화 하지마
null, // row그룹으로 필터 걸지마
sortOrder // 분류 순서
);
데이터베이스에서 정보 삭제
// 쿼리에서 어딘가
String selection = FeedEntry.COLUMN_NAME_TITLE + " LIKE ?";
//자리 표시자 순서로 인수 지정
String[] selectionArgs = { "MyTitle" };
// delete를 통해 지운다
int deletedRows = db.delete(FeedEntry.TABLE_NAME, selection, selectionArgs);
2, Room 라이브러리
- SQLite를 기반으로한 Object Relational Mapping 라이브러리
- 데이터베이스 및 쿼리를 쉽게 구현할 수 있도록 도와줌
- Entity, DAO(Data Access Object), DataBase등의 구성요소 사용
// Entity 클래스
@Entity
public class User {
@PrimaryKey(autoGenerate = true)
public int userId;
public String userName;
}
// DAO 인터페이스
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
List<User> getAllUsers();
@Insert
void insertUser(User user);
}
// Database 클래스
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
3, SharedPreferences
- 간단한 키-쌍을 저장하기 위하ㄴ 경랼 데이터 저장소
- 서정 값이나 간단한 사용자 정보와 같은 작은 데이터 세트에 적합
// SharedPreferences에 데이터 저장
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("key", "value");
editor.apply();
// SharedPreferences에서 데이터 읽기
String value = preferences.getString("key", defaultValue);
4, 파일 시스템
- 간단한 텍스트 파일이나 이전 파일을 사용하여 데이터 저장
- FileInputStream 및 FileOutputStream 등의 클래스 사용하여 파일을 일고 쓴다.
// 파일에 데이터 쓰기
try (FileOutputStream fos = context.openFileOutput("filename", Context.MODE_PRIVATE)) {
fos.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
// 파일에서 데이터 읽기
try (FileInputStream fis = context.openFileInput("filename")) {
byte[] buffer = new byte[1024];
int n;
while ((n = fis.read(buffer)) != -1) {
// 데이터 처리
}
} catch (IOException e) {
e.printStackTrace();
}
출처
https://developer.android.com/training/data-storage/sqlite?hl=ko