Android 데이터베이스 단일 SQLiteOpenHelper

1781 단어 Android
sqlite 에서 데이터 베 이 스 를 여러 번 열 고 데이터 베 이 스 를 높 은 동시 다발 로 조작 하면 잠 금 표를 만 들 기 쉬 우 므 로 데이터 베 이 스 를 한 번 만 여 는 상황 에서 데이터 베 이 스 를 여러 번 조작 할 수 있 습 니 다.
SQLiteOpenHelper 에서 MyDatabaseHelper 를 새로 만 듭 니 다.
volatile 을 사용 하여 MyDatabaseHelper 대상 을 설명 하고 getDBHelper()방법 으로 유일한 인 스 턴 스 를 가 져 옵 니 다.
private volatile static MyDatabaseHelper myDBHelper;

    private MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    //         ,  getDBHelper  helper        ,  helper     
    public static MyDatabaseHelper getDBHelper(Context context) {
        if (myDBHelper == null) {
            synchronized (MyDatabaseHelper.class) {
                if (myDBHelper == null) {
                    myDBHelper = new MyDatabaseHelper(context, "MyWeather.db", null, DBVersion);
                }
            }
        }
        return myDBHelper;
    }

데이터베이스 작업 이 필요 한 클래스 에서 MyDatabaseHelper.getDBHelper(context)방법 으로 유일한 helper 를 가 져 옵 니 다.이 helper 를 사용 하여 데이터 베 이 스 를 조작 합 니 다.
private SQLiteDatabase db;
...
db = MyDatabaseHelper.getDBHelper(getContext()).getWritableDatabase();
...
db.delete("SavedCity", "cityName = ?", new String[]{cityName});

물론 Helper 클래스 에서 데이터 베 이 스 를 가 져 오 는 방법 을 직접 설명 할 수도 있 습 니 다.
//    private SQLiteDatabase mDB;
public SQLiteDatabase openWriteLink(){
    if(mDB == null||!mDB.isOpen()){
        mDB = myDBHelper.getWritableDatabase();
    }
    return mDB;
}
//               

데이터 베 이 스 를 닫 는 방법 도 밝 혀 야 한다.
public void closeLink(){
    if(mDB != null && mDB.isOpen()){
        mDB.close();
        mDB = null;
    }
}

좋은 웹페이지 즐겨찾기