文件管理器源码分析(三)
来源:互联网 发布:jquery load页面和js 编辑:程序博客网 时间:2024/05/17 12:47
//存储favorite数据,到数据库//SQLiteOpenHelper是一个帮助管理数据库和版本的工具类。//通过继承并重载方法,快速实现了我们自己的Favorite表的CRUD。//怎么感觉和FileOperationHelper类似,仍然是CRUD,只不过1个是数据库中的,1个是文件的。public class FavoriteDatabaseHelper extends SQLiteOpenHelper { //下面6个字段是数据库的名字和版本号、表的名字和3个字段 private final static String DATABASE_NAME = "file_explorer"; private final static int DATABASE_VERSION = 1; private final static String TABLE_NAME = "favorite"; public final static String FIELD_ID = "_id"; public final static String FIELD_TITLE = "title"; public final static String FIELD_LOCATION = "location"; private boolean firstCreate; //数据库变化的时候,会通知其它监听器 private FavoriteDatabaseListener mListener; private static FavoriteDatabaseHelper instance; public interface FavoriteDatabaseListener { void onFavoriteDatabaseChanged(); } //这个构造方法和下面的静态获得实例的方法,不太和谐啊~ //乍一看,以为是单例模式呢,实则不是~ public FavoriteDatabaseHelper(Context context, FavoriteDatabaseListener listener) { super(context, DATABASE_NAME, null, DATABASE_VERSION); instance = this; mListener = listener; } //这个地方感觉只是方便存储了一个类的实例,但不能保证这个类只有1个实例 public static FavoriteDatabaseHelper getInstance() { return instance; } //数据库创建,1个sql @Override public void onCreate(SQLiteDatabase db) { String sql = "Create table " + TABLE_NAME + "(" + FIELD_ID + " integer primary key autoincrement," + FIELD_TITLE + " text, " + FIELD_LOCATION + " text );"; db.execSQL(sql); firstCreate = true; } //升级的时候,直接删除以前的数据库,如果存在的话 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { String sql = " DROP TABLE IF EXISTS " + TABLE_NAME; db.execSQL(sql); onCreate(db); } //是否为第1次创建 public boolean isFirstCreate() { return firstCreate; } //判断1个文件路径是否已经存在,或者说是否是Favorite文件 public boolean isFavorite(String path) { String selection = FIELD_LOCATION + "=?"; String[] selectionArgs = new String[] { path }; SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(TABLE_NAME, null, selection, selectionArgs, null, null, null); if (cursor == null) return false; boolean ret = cursor.getCount() > 0; cursor.close(); return ret; } //获得Favorite表的游标 public Cursor query() { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null); return cursor; } //插入一条记录 public long insert(String title, String location) { if (isFavorite(location)) return -1; SQLiteDatabase db = this.getWritableDatabase(); long ret = db.insert(TABLE_NAME, null, createValues(title, location)); mListener.onFavoriteDatabaseChanged(); return ret; } //根据id,删除一条记录。如果需要,然后通知相关监听器 public void delete(long id, boolean notify) { SQLiteDatabase db = this.getWritableDatabase(); String where = FIELD_ID + "=?"; String[] whereValue = { Long.toString(id) }; db.delete(TABLE_NAME, where, whereValue); if (notify) mListener.onFavoriteDatabaseChanged(); } //根据位置删除1条记录,一定通知相关监听器 public void delete(String location) { SQLiteDatabase db = this.getWritableDatabase(); String where = FIELD_LOCATION + "=?"; String[] whereValue = { location }; db.delete(TABLE_NAME, where, whereValue); mListener.onFavoriteDatabaseChanged(); } //更新1条记录 public void update(int id, String title, String location) { SQLiteDatabase db = this.getWritableDatabase(); String where = FIELD_ID + "=?"; String[] whereValue = { Integer.toString(id) }; db.update(TABLE_NAME, createValues(title, location), where, whereValue); mListener.onFavoriteDatabaseChanged(); } private ContentValues createValues(String title, String location) { ContentValues cv = new ContentValues(); cv.put(FIELD_TITLE, title); cv.put(FIELD_LOCATION, location); return cv; }}
1 0
- 文件管理器源码分析(三)
- 文件管理器源码分析(一)
- 文件管理器源码分析(二)
- 文件管理器源码分析(四)
- 文件管理器源码分析(五)
- Scrapy源码分析(三):信号管理器SignalManager
- 毕业设计(手机文件管理器源码)
- CTP源码分析4 CTP链路质量估计层结构及源码分析(三)----源码头文件解读
- JUnit源码分析(三)
- Log4net源码分析(三)
- Log4net源码分析(三)
- Logcat源码分析(三)
- Log4net源码分析(三)
- pomelo源码分析(三)
- H264源码分析(三)
- mosquitto源码分析(三)
- openMPM源码分析(三)
- mosquitto源码分析(三)
- 查看Android应用签名信息
- HDU1016:Prime Ring Problem(DFS)
- Java学习之输入+文本输出
- 电气设备新能源行业周报
- 关于Hibernate操作数据库不显示中文字符
- 文件管理器源码分析(三)
- HDU 4745 Two Rabbits【非连续最长回文子序列,区间DP】
- C++中继承,虚函数的调用问题
- HDU 4158
- ansible 安装
- jenkins自动构建.net时提示“任务失败,因为未找到“AxImp.exe”,或未安装正确的 Microsoft Windows SDK“
- 蓝桥杯 算法提高 身份证号码升级
- HTML5 XMLHttpRequest中的新功能
- 远程执行命令