本篇主要記錄如何使用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(); } }