Android中SQLite數據庫的使用(總結)

本篇主要記錄如何使用Android自帶的SQLiteOpenHelper幫助類來進行SQLite數據的CRUD操作。

一、自定義MyDatabaseHelper類,繼承自SQLiteOpenHelper抽象類。

/**
 * 數據庫幫助類
 */
public class MyDatabaseHelper extends SQLiteOpenHelper {

    private Context mContext;
    private static MyDatabaseHelper myDatabaseHelper;
    private static String DATABASE_NAME = "BookStore.db";

    //創建用戶表的SQL語句
    private String CREATE_USER = "create table Tb_User (\n" +
            "id integer primary key autoincrement,\n" +
            "name text,\n" +
            "sex text)";

    /**
     * 獲取MyDatabaseHelper對象
     * @param context
     * @return
     */
    public static MyDatabaseHelper getInstance(Context context) {
        if (myDatabaseHelper == null) {
            myDatabaseHelper = new MyDatabaseHelper(context, DATABASE_NAME, null, 1);
        }
        return myDatabaseHelper;
    }

    public MyDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        this.mContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(CREATE_USER);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        //如果數據庫需要進行升級更新(比如,增加表字段之類的),請在這裏編寫代碼,上面的version要加1.
    }
}

二、可以給每一個Model增加一個M_Model管理類,裏面進行CRUD操作處理。

/**
 * 用戶管理類
 */
public class M_User implements IUser {

    private SQLiteDatabase sqLiteDatabase;
    private MyDatabaseHelper myDatabaseHelper = MyDatabaseHelper.getInstance(MyApplication.getContext());
    private String TABLE_NAME = "Tb_User";

    private Tb_User tb_user;
    private List<Tb_User> userList;

    /**
     * 獲取用戶列表
     * @param condition
     * @param conditionArgs
     * @param onGetUserListListener
     */
    @Override
    public void getUserList(final String condition, final String[] conditionArgs, final OnGetUserListListener onGetUserListListener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                userList = new ArrayList<>();
                sqLiteDatabase = myDatabaseHelper.getReadableDatabase();
                Cursor cursor = sqLiteDatabase.query(TABLE_NAME, new String[] {"id", "name", "sex"}, condition
                        , conditionArgs, null, null, null);
                if (cursor.moveToFirst()) {
                    do {
                        tb_user = new Tb_User();
                        String name = cursor.getString(cursor.getColumnIndex("name"));
                        String sex = cursor.getString(cursor.getColumnIndex("sex"));
                        tb_user.setName(name);
                        tb_user.setSex(sex);
                        userList.add(tb_user);
                    } while (cursor.moveToNext());
                }
                cursor.close();
                if (userList.size() != 0) {
                    onGetUserListListener.success(userList);
                } else {
                    onGetUserListListener.failed();
                }
            }
        }).start();
    }

    /**
     * 用戶添加
     * @param tb_user
     * @param onCallBackNullListener
     */
    @Override
    public void userAdd(final Tb_User tb_user, final OnCallBackNullListener onCallBackNullListener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                sqLiteDatabase = myDatabaseHelper.getWritableDatabase();
                ContentValues contentValues = new ContentValues();
                contentValues.put("name", tb_user.getName());
                contentValues.put("sex", tb_user.getSex());
                long result = sqLiteDatabase.insert(TABLE_NAME, null, contentValues);
                if (result > 0) {
                    onCallBackNullListener.success();
                } else {
                    onCallBackNullListener.failed();
                }
            }
        }).start();
    }

    /**
     * 用戶修改
     * @param tb_user
     * @param condition
     * @param conditionArgs
     * @param onCallBackNullListener
     */
    @Override
    public void userUpdate(final Tb_User tb_user, final String condition, final String[] conditionArgs, final OnCallBackNullListener onCallBackNullListener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                sqLiteDatabase = myDatabaseHelper.getWritableDatabase();
                ContentValues contentValues = new ContentValues();
                contentValues.put("name", tb_user.getName());
                contentValues.put("sex", tb_user.getSex());
                int result = sqLiteDatabase.update(TABLE_NAME, contentValues, condition, conditionArgs);
                if (result > 0) {
                    onCallBackNullListener.success();
                } else {
                    onCallBackNullListener.failed();
                }
            }
        }).start();
    }

    /**
     * 用戶刪除
     * @param condition
     * @param conditionArgs
     * @param onCallBackNullListener
     */
    @Override
    public void userDelete(final String condition, final String[] conditionArgs, final OnCallBackNullListener onCallBackNullListener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                sqLiteDatabase = myDatabaseHelper.getWritableDatabase();
                ContentValues contentValues = new ContentValues();
                contentValues.put("name", tb_user.getName());
                contentValues.put("sex", tb_user.getSex());
                int result = sqLiteDatabase.delete(TABLE_NAME, condition, conditionArgs);
                if (result > 0) {
                    onCallBackNullListener.success();
                } else {
                    onCallBackNullListener.failed();
                }
            }
        }).start();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章