안드로이드 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

 

SQLite를 사용하여 데이터 저장  |  Android 개발자  |  Android Developers

DataStore는 로컬 데이터를 저장하는 최신 방법을 제공합니다. SharedPreferences 대신 DataStore를 사용해야 합니다. 자세한 내용은 DataStore 가이드를 참고하세요. SQLite를 사용하여 데이터 저장 컬렉션을

developer.android.com