单例模式数据库
来源:互联网 发布:西甲球员数据统计 编辑:程序博客网 时间:2024/05/16 08:08
定义三张数据库
public class CleanMarsterDatabase { public static final String DATABASE_NAME = "cleanmarter.db"; public static final int DATABASE_VERSION = 1; /** * 卸载残留垃圾清理 */ public static class Uninstall { public final static String TABLE_NAME = "apk_uninstall"; public static final String KEY_PACKNAME = "packagename"; } /** * 缓存垃圾 */ public static class Cache { public final static String TABLE_NAME = "cache"; public static final String KEY_PACKNAME = "packagename"; public static final String KEY_CACHE_SIZE = "cache_size"; public static final String KEY_MIN_CACHE_SIZE = "min_cache_size"; public static final String KEY_LAST_TIME = "last_time"; } /** * 静默卸载 */ public static class PackageSize { public final static String TABLE_NAME = "save_uninstall_info"; public static final String KEY_PACKNAME = "packagename"; public static final String KEY_LAST_TIME = "last_time"; public static final String KEY_PACKAGE_SIZE = "package_size"; }
单例模式数据库
典型单例模式
private static CleanMarsterHelp mInstance; public static CleanMarsterHelp getInstance(Context mContext) { if (mInstance == null) { synchronized (CleanMarsterHelp.class) { mInstance = new CleanMarsterHelp(mContext); } } return mInstance; }
比较完整示例
import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class CleanMarsterHelp extends SQLiteOpenHelper { private static CleanMarsterHelp mInstance; public static CleanMarsterHelp getInstance(Context mContext) { if (mInstance == null) { synchronized (CleanMarsterHelp.class) { mInstance = new CleanMarsterHelp(mContext); } } return mInstance; } public CleanMarsterHelp(Context mContext) { super(mContext, CleanMarsterDatabase.DATABASE_NAME, null, CleanMarsterDatabase.DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table " + CleanMarsterDatabase.Uninstall.TABLE_NAME + "(" + CleanMarsterDatabase.Uninstall.KEY_PACKNAME + " TEXT PRIMARY KEY" + ");"); db.execSQL("create table " + CleanMarsterDatabase.PackageSize.TABLE_NAME + "(" + CleanMarsterDatabase.PackageSize.KEY_PACKNAME + " TEXT PRIMARY KEY," + CleanMarsterDatabase.PackageSize.KEY_PACKAGE_SIZE + " integer DEFAULT 0," + CleanMarsterDatabase.PackageSize.KEY_LAST_TIME + " integer DEFAULT 0" + ");"); db.execSQL("create table " + CleanMarsterDatabase.Cache.TABLE_NAME + "(" + CleanMarsterDatabase.Cache.KEY_PACKNAME + " TEXT PRIMARY KEY," + CleanMarsterDatabase.Cache.KEY_CACHE_SIZE + " integer DEFAULT 12288," + CleanMarsterDatabase.Cache.KEY_MIN_CACHE_SIZE + " integer DEFAULT 12288," + CleanMarsterDatabase.Cache.KEY_LAST_TIME + " integer DEFAULT 0" + ");"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS clean_master"); onCreate(db); }}
使用单例模式
建立一个BaseDao的基类,便于子类获得相同的实例及其共同方法
import android.content.Context;public class BaseDao { private CleanMarsterHelp mCleanMarsterHelp; public CleanMarsterHelp openDB(Context mContext) { if (null == mCleanMarsterHelp) { mCleanMarsterHelp = CleanMarsterHelp.getInstance(mContext); } return mCleanMarsterHelp; } public void closeDB() { if (mCleanMarsterHelp != null) { mCleanMarsterHelp.getWritableDatabase().close(); } }}
子类调用单例 openDb()
子类1
注意这里的openDb()使用单例获取实例
import java.util.HashMap;import java.util.List;import com.cleanmaster.domain.CacheInfo;import com.cleanmaster.utils.CleanMasterUtil;import com.cleanmaster.utils.ConstantUtil;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.util.Log;public class CacheDao extends BaseDao { private static final String TAG = CacheDao.class.getSimpleName(); private Context mContext; public CacheDao(Context mContext) { this.mContext = mContext; } public void insertCacheSize(Context context, String packageName, Long size) { ContentValues mContentValues = new ContentValues(); mContentValues.put(CleanMarsterDatabase.Cache.KEY_PACKNAME, packageName); mContentValues.put(CleanMarsterDatabase.Cache.KEY_CACHE_SIZE, size); mContentValues.put(CleanMarsterDatabase.Cache.KEY_LAST_TIME, System.currentTimeMillis()); openDB(mContext).getWritableDatabase().insert(CleanMarsterDatabase.Cache.TABLE_NAME, null, mContentValues); if (ConstantUtil.DEBUG) Log.i(TAG, "shz insertCacheDb packageName = " + packageName); }
子类2
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import com.cleanmaster.domain.UninstallInfo;import com.cleanmaster.utils.CleanMasterUtil;import com.cleanmaster.utils.ConstantUtil;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.util.Log;public class SilentUninstallDao extends BaseDao { private static final String TAG = SilentUninstallDao.class.getSimpleName(); private Context mContext; public SilentUninstallDao(Context mContext) { this.mContext = mContext; } public void insertApkInstall(Context context, String packageName, Long size) { ContentValues mContentValues = new ContentValues(); mContentValues.put(CleanMarsterDatabase.PackageSize.KEY_PACKNAME, packageName); mContentValues.put(CleanMarsterDatabase.PackageSize.KEY_PACKAGE_SIZE, size); mContentValues.put(CleanMarsterDatabase.PackageSize.KEY_LAST_TIME, System.currentTimeMillis()); openDB(mContext).getWritableDatabase().insert(CleanMarsterDatabase.PackageSize.TABLE_NAME, null, mContentValues); if (ConstantUtil.DEBUG) Log.i(TAG, "shz insertApkInstallDb packageName = " + packageName); }
子类3
import java.util.ArrayList;import java.util.List;import com.cleanmaster.utils.ConstantUtil;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.util.Log;public class UninstallResidueDao extends BaseDao { private static final String TAG = UninstallResidueDao.class.getSimpleName(); private Context mContext; public UninstallResidueDao(Context mContext) { this.mContext = mContext; } public void insertSaveUninstallInfoDb(Context context, String packageName) { ContentValues mContentValues = new ContentValues(); mContentValues.put(CleanMarsterDatabase.Uninstall.KEY_PACKNAME, packageName); openDB(mContext).getWritableDatabase().insert(CleanMarsterDatabase.Uninstall.TABLE_NAME, null, mContentValues); if (ConstantUtil.DEBUG) Log.i(TAG, "shz insertSaveUninstallInfoDb packageName = " + packageName); }
阅读全文
0 0
- 单例模式数据库
- 单例模式实现数据库
- PHP数据库单例模式
- JDBC连接数据库(单例设计模式)
- JDBC单例模式连接数据库方式
- [android]单例模式 android数据库
- 单例模式连接数据库实例
- java单例模式生成数据库主键
- android 单例模式 数据库操作
- 第四节 单例模式连接数据库
- PHP pdo单例模式连接数据库
- PHP-单例模式-数据库类
- JDBC 连接数据库之单例模式
- 单例模式封装PDO链接数据库
- 单例模式struts2连接数据库
- PHP 单例模式连接数据库
- 单例模式在数据库中的应用
- php 单例模式下 数据库链接的应用
- Visual Studio中使用开源二维码QR库libqr
- Android下载更新(兼容7.0文件,支持5.0通知栏显示Icon)
- 像扫把星一样
- Monkeyrunner实现UI自动化
- Hadoop 2.6.4 分布式搭建
- 单例模式数据库
- WINEAPI VB录音 程序 X64,然后请教下WIN10下为何10多分钟产生UNPREPARE错误
- ubuntu修改时区和时间的方法
- lintcode---Sum of first K even-length Palindrome numbers
- LintCode 1 : A + B 问题 (java实现)
- Oracle sqlplus 常用命令总结
- linux top 命令详解
- 编写qml到安卓手机的一些小心得续
- 用springmvc 开发为 app 提供后台服务遇到跨域请求的问题