Android Sqlite 工具類封裝

來源:互聯網
上載者:User

標籤:

鑒於經常使用 Sqlite 資料庫做資料持久化處理,進行了一點封裝,方便使用。

該封裝類主要支援一下功能

  1. 支援多使用者資料儲存
  2. 支援 Sqlite資料庫升級
  3. 支援傳入 Sql 語句建表
  4. 支援 SQLiteDatabase 基本操作。比如:execSQL、rawQuery、insert等等
  5. 解決了資料庫並發問題
      

先貼上封裝類代碼

/** *  * @ClassName: DataBaseOpenHelper * @Description: 資料庫工具類 * @author lhy * @date 2014-10-9 下午2:36:41 *  */public class DataBaseOpenHelper extends SQLiteOpenHelper {private static Map<String, DataBaseOpenHelper> dbMaps = new HashMap<String, DataBaseOpenHelper>();private OnSqliteUpdateListener onSqliteUpdateListener;/** * 建表語句列表 */private List<String> createTableList;private String nowDbName;private DataBaseOpenHelper(Context context, String dbName, int dbVersion, List<String> tableSqls) {super(context, dbName, null, dbVersion);nowDbName = dbName;createTableList = new ArrayList<String>();createTableList.addAll(tableSqls);}/** *  * @Title: getInstance * @Description: 擷取資料庫執行個體 * @param @param context * @param @param userId * @param @return * @return DataBaseOpenHelper * @author lihy */public static DataBaseOpenHelper getInstance(Context context, String dbName, int dbVersion, List<String> tableSqls) {DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(dbName);if (dataBaseOpenHelper == null) {dataBaseOpenHelper = new DataBaseOpenHelper(context, dbName, dbVersion, tableSqls);}dbMaps.put(dbName, dataBaseOpenHelper);return dataBaseOpenHelper;};@Overridepublic void onCreate(SQLiteDatabase db) {for (String sqlString : createTableList) {db.execSQL(sqlString);}}/** *  * @Title: execSQL * @Description: Sql寫入 * @param @param sql * @param @param bindArgs * @return void * @author lihy */public void execSQL(String sql, Object[] bindArgs) {DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);synchronized (dataBaseOpenHelper) {SQLiteDatabase database = dataBaseOpenHelper.getWritableDatabase();database.execSQL(sql, bindArgs);}}/** *  * @Title: rawQuery * @Description: * @param @param sql查詢 * @param @param bindArgs * @param @return * @return Cursor * @author lihy */public Cursor rawQuery(String sql, String[] bindArgs) {DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);synchronized (dataBaseOpenHelper) {SQLiteDatabase database = dataBaseOpenHelper.getReadableDatabase();Cursor cursor = database.rawQuery(sql, bindArgs);return cursor;}}/** *  * @Title: insert * @Description: 插入資料 * @param @param table * @param @param contentValues 設定檔案 * @return void 傳回型別 * @author lihy * @throws */public void insert(String table, ContentValues contentValues) {DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);synchronized (dataBaseOpenHelper) {SQLiteDatabase database = dataBaseOpenHelper.getWritableDatabase();database.insert(table, null, contentValues);}}/** *  * @Title: update * @Description: 更新 * @param @param table * @param @param values * @param @param whereClause * @param @param whereArgs 設定檔案 * @return void 傳回型別 * @throws */public void update(String table, ContentValues values, String whereClause, String[] whereArgs) {DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);synchronized (dataBaseOpenHelper) {SQLiteDatabase database = dataBaseOpenHelper.getWritableDatabase();database.update(table, values, whereClause, whereArgs);}}/** *  * @Title: delete * @Description:刪除 * @param @param table * @param @param whereClause * @param @param whereArgs * @return void * @author lihy */public void delete(String table, String whereClause, String[] whereArgs) {DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);synchronized (dataBaseOpenHelper) {SQLiteDatabase database = dataBaseOpenHelper.getWritableDatabase();database.delete(table, whereClause, whereArgs);}}/** *  * @Title: query * @Description: 查 * @param @param table * @param @param columns * @param @param selection * @param @param selectionArgs * @param @param groupBy * @param @param having * @param @param orderBy * @return void * @author lihy */public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having,String orderBy) {DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);synchronized (dataBaseOpenHelper) {SQLiteDatabase database = dataBaseOpenHelper.getReadableDatabase();// Cursor cursor = database.rawQuery("select * from "// + TableName.TABLE_NAME_USER + " where userId =" + userId, null);Cursor cursor = database.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);return cursor;}}/** *  * @Description:查 * @param table * @param columns * @param selection * @param selectionArgs * @param groupBy * @param having * @param orderBy * @param limit * @return * Cursor * @exception: * @author: lihy * @time:2015-4-3 上午9:37:29 */public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having,String orderBy,String limit) {DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);synchronized (dataBaseOpenHelper) {SQLiteDatabase database = dataBaseOpenHelper.getReadableDatabase();// Cursor cursor = database.rawQuery("select * from "// + TableName.TABLE_NAME_USER + " where userId =" + userId, null);Cursor cursor = database.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit);return cursor;}}/** *  * @Description 查詢,方法重載,table表名,sqlString條件 * @param @return * @return Cursor * @author lihy */public Cursor query(String tableName, String sqlString) {DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);synchronized (dataBaseOpenHelper) {SQLiteDatabase database = dataBaseOpenHelper.getReadableDatabase();Cursor cursor = database.rawQuery("select * from " + tableName + " " + sqlString, null);return cursor;}}/** * @see android.database.sqlite.SQLiteOpenHelper#close() */public void clear() {DataBaseOpenHelper dataBaseOpenHelper = dbMaps.get(nowDbName);dataBaseOpenHelper.close();dbMaps.remove(dataBaseOpenHelper);}/** * onUpgrade()方法在資料庫版本每次發生變化時都會把使用者手機上的資料庫表刪除,然後再重新建立。<br/> * 一般在實際項目中是不能這樣做的,正確的做法是在更新資料庫表結構時,還要考慮使用者存放於資料庫中的資料不會丟失,從版本幾更新到版本幾。(非 * Javadoc) *  * @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite *      .SQLiteDatabase, int, int) */@Overridepublic void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {if (onSqliteUpdateListener != null) {onSqliteUpdateListener.onSqliteUpdateListener(db, arg1, arg2);}}public void setOnSqliteUpdateListener(OnSqliteUpdateListener onSqliteUpdateListener) {this.onSqliteUpdateListener = onSqliteUpdateListener;}}

 資料庫更新介面代碼

public interface OnSqliteUpdateListener {public void onSqliteUpdateListener(SQLiteDatabase db, int oldVersion, int newVersion);}

 

Android Sqlite 工具類封裝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.