package com.base.db; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import com.base.bean.BaseBean; public class IssDBFactory { private static final String TAG = IssDBFactory.class.getSimpleName(); private DBConfig mConfig; private SQLiteDatabase mSQLiteDB; private IssDBOpenHelper mDBOpenHelper; private final Context mContext; private static IssDBFactory instance ; private IssDBFactory(Context context) { mContext = context; } public static void init(Context context,DBConfig dbConfig){ if(instance==null){ instance = new IssDBFactory(context.getApplicationContext()); instance.setDBConfig(dbConfig); } } public static IssDBFactory getInstance(){ return instance; } public void setDBConfig(DBConfig dbConfig){ mConfig = dbConfig; } public DBConfig getDBConfig(){ return mConfig; } public SQLiteDatabase open() { if(mSQLiteDB==null){ mDBOpenHelper = new IssDBOpenHelper(mContext, mConfig.dbName, null, mConfig.dbVersion); mSQLiteDB = mDBOpenHelper.getWritableDatabase(); } return mSQLiteDB; } public void close() { if(mDBOpenHelper!=null){ mDBOpenHelper.close(); } } public void beginTransaction() { if(mSQLiteDB==null){ mSQLiteDB.beginTransaction(); } } public void endTransaction() { if (mSQLiteDB==null&&mSQLiteDB.inTransaction()) { mSQLiteDB.endTransaction(); } } public void setTransactionSuccessful() { if (mSQLiteDB==null){ mSQLiteDB.setTransactionSuccessful(); } } private final class IssDBOpenHelper extends SQLiteOpenHelper { public IssDBOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { for (Class<? extends BaseBean<?>> table : mConfig.tableList) { try { for (String statment : TableUtil.getCreateStatments(table)) { Log.d(TAG, statment); db.execSQL(statment); } } catch (Throwable e) { Log.e(TAG, "Can't create table " + table.getSimpleName()); } } /** * 初始化数据 */ // initData(); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.d(TAG, "onUpgrade: " + oldVersion + " >> " + newVersion); for (Class<? extends BaseBean<?>> table : mConfig.tableList) { try { db.execSQL("DROP TABLE IF EXISTS " + TableUtil.getTableName(table)); } catch (Throwable e) { Log.e(TAG, "Can't create table " + table.getSimpleName()); } } onCreate(db); } } public void cleanTable(String tableName, int maxSize, int batchSize) { Cursor cursor = mSQLiteDB.rawQuery("select count(_id) from " + tableName, null); if (cursor.getCount() != 0 && cursor.moveToFirst() && !cursor.isAfterLast()) { if (cursor.getInt(0) >= maxSize) { int deleteSize = maxSize - batchSize; mSQLiteDB.execSQL("delete from " + tableName + " where _id in (" + "select _id from " + tableName + " order by _id " + " limit " + deleteSize + " )"); } } cursor.close(); } }