package com.michael.doubanonline.db; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteStatement; import com.michael.doubanonline.MyApplication; import com.michael.doubanonline.util.L; /** * 数据库管理类,将对数据库的各种操作封装为方法 * * @author Michael * * */ public class DBManager { /**活动列表,本日最热*/ public static final int ONLINE_LIST_DAY = 1000; /**活动列表,本周最热*/ public static final int ONLINE_LIST_WEEK = 2000; /**活动列表,最新活动*/ public static final int ONLINE_LIST_LATEST = 3000; /**活动列表,我的活动*/ public static final int ONLINE_LIST_ME = 4000; /**用户授权信息*/ public static final int USER_CERTIFICATION = 1111; /**用户个人信息*/ public static final int USER_INFO = 2222; private static final String TAG = "DBManagers"; private static DBHelper helper; private static DBManager uniqueInstance; /** * 单例 * */ public static DBManager getInstance() { if (uniqueInstance == null) { uniqueInstance = new DBManager(); } return uniqueInstance; } private DBManager() { helper = new DBHelper(MyApplication.applicationContext); } /** * 这里的CacheType就是唯一标识一个评论的 * */ public void insertCommentCache(long cacheId, String content) { if(isCommentCacheExist(cacheId)) { deleteCommentCache(cacheId); } String sql = "INSERT INTO comments_cache(cacheType, content)VALUES(?,?)"; SQLiteDatabase db = helper.getWritableDatabase(); SQLiteStatement insertStmt = db.compileStatement(sql); insertStmt.clearBindings(); insertStmt.bindLong(1, cacheId); insertStmt.bindString(2, content); insertStmt.executeInsert(); db.close(); L.e(TAG, "插入缓存"); } public String getCommentCache(long cacheId) { SQLiteDatabase db = helper.getWritableDatabase(); String sql = "SELECT * FROM comments_cache WHERE cacheType = " + cacheId; Cursor cursor = db.rawQuery(sql, new String[] {}); String cache = null; if (cursor.moveToFirst()) { cache = cursor.getString(2); } if (cursor != null && !cursor.isClosed()) { cursor.close(); } db.close(); if (cursor.getCount() == 0) { L.e(TAG, "当前缓存不存在,返回null"); return null; } else { L.e(TAG, "当前缓存存在, 成功返回"); return cache; } } public boolean isCommentCacheExist(long cacheId) { SQLiteDatabase db = helper.getReadableDatabase(); String sql = "SELECT * FROM comments_cache WHERE cacheType = " + cacheId; Cursor cursor = db.rawQuery(sql, new String[] {}); int count = cursor.getCount(); db.close(); if (count > 0) { L.e(TAG, "缓存存在"); return true; } else { L.e(TAG, "缓存不存在"); return false; } } public void deleteCommentCache(long cacheId) { SQLiteDatabase db = helper.getReadableDatabase(); String sql = "DELETE FROM comments_cache WHERE cacheType = " + cacheId; db.execSQL(sql); db.close(); L.e(TAG, "删除缓存"); } /** * 清空表数据 * */ public void clearCommentCache() { SQLiteDatabase db = helper.getWritableDatabase(); String sql = "DELETE FROM comments_cache"; db.execSQL(sql); db.close(); L.e(TAG, "清空所有缓存"); } //------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------ /** * 插入缓存,如果存在就删除 * */ public void insertCache(int cacheType, String content) { if(isCacheExist(cacheType)) { deleteCache(cacheType); } String sql = "INSERT INTO main_cache(cacheType, content)VALUES(?,?)"; SQLiteDatabase db = helper.getWritableDatabase(); SQLiteStatement insertStmt = db.compileStatement(sql); insertStmt.clearBindings(); insertStmt.bindLong(1, cacheType); insertStmt.bindString(2, content); insertStmt.executeInsert(); db.close(); L.e(TAG, "插入缓存"); } /** * 更新缓存 * */ public void updateCache(int cacheType, String content) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues dataToInsert = new ContentValues(); dataToInsert.put("cacheType", cacheType); dataToInsert.put("content", content); String where = " cacheType = " + "\"" + cacheType + "\""; db.update("main_cache", dataToInsert, where, null); db.close(); L.e(TAG, "更新缓存"); } /** * 获取缓存 * */ public String getCache(int cacheType) { SQLiteDatabase db = helper.getWritableDatabase(); String sql = "SELECT * FROM main_cache WHERE cacheType = " + cacheType; Cursor cursor = db.rawQuery(sql, new String[] {}); String cache = null; if (cursor.moveToFirst()) { cache = cursor.getString(2); } if (cursor != null && !cursor.isClosed()) { cursor.close(); } db.close(); if (cursor.getCount() == 0) { L.e(TAG, "当前缓存不存在,返回null"); return null; } else { L.e(TAG, "当前缓存存在, 成功返回"); return cache; } } /** * 获取缓存的时间 * */ public String getCacheTime(int cacheType) { SQLiteDatabase db = helper.getWritableDatabase(); String sql = "SELECT * FROM main_cache WHERE cacheType = " + cacheType; Cursor cursor = db.rawQuery(sql, new String[] {}); String cache = null; if (cursor.moveToFirst()) { cache = cursor.getString(3); } if (cursor != null && !cursor.isClosed()) { cursor.close(); } db.close(); if (cursor.getCount() == 0) { L.e(TAG, "当前缓存不存在,返回null"); return null; } else { L.e(TAG, "当前缓存存在, 成功返回"); return cache; } } /** * 缓存是否存在 * */ public boolean isCacheExist(long cacheType) { SQLiteDatabase db = helper.getReadableDatabase(); String sql = "SELECT * FROM main_cache WHERE cacheType = " + cacheType; Cursor cursor = db.rawQuery(sql, new String[] {}); int count = cursor.getCount(); db.close(); if (count > 0) { L.e(TAG, "缓存存在"); return true; } else { L.e(TAG, "缓存不存在"); return false; } } /** * 删除缓存 * */ public void deleteCache(long cacheType) { SQLiteDatabase db = helper.getReadableDatabase(); String sql = "DELETE FROM main_cache WHERE cacheType = " + cacheType; db.execSQL(sql); db.close(); L.e(TAG, "删除缓存"); } /** * 清空缓存 * */ public void clearCache() { SQLiteDatabase db = helper.getWritableDatabase(); String sql = "DELETE FROM main_cache"; db.execSQL(sql); db.close(); L.e(TAG, "清空所有缓存"); } }