小米開原始檔管理器MiCodeFileExplorer-原始碼研究(7)-Favorite收藏管理和SQLite資料庫CRUD
FavoriteDatabaseHelper,儲存favorite資料,到SQLite資料庫。
SQLiteOpenHelper是一個幫助管理資料庫和版本的工具類。
通過繼承並過載方法,快速實現了我們自己的Favorite表的CRUD。
怎麼感覺和FileOperationHelper類似,仍然是CRUD,只不過1個是資料庫中的,1個是檔案的。
程式碼比較簡單,每個函式的功能比較單一清晰,CRUD,主要是使用android.database.sqlite.SQLiteDatabase操作SQLite資料庫。
package net.micode.fileexplorer.util;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
//儲存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
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;
}
//升級的時候,直接刪除以前的資料庫,如果存在的話
//版本號,沒用上啊
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;
}
}
相關文章
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(0)-初步研究原始碼
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(9)-入口分析原始碼
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(1)-2個模型Model原始碼模型
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(8)-檔案排序工具類FileSortHelper原始碼排序
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(5)-AsyncTask非同步任務原始碼非同步
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(3)-使用最多的工具類Util原始碼
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(6)-媒體檔案MediaFile和檔案型別MimeUtils原始碼型別
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(2)-2個單例項工具類原始碼單例
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(4)-檔案操作工具類FileOperationHelper原始碼
- SQLite資料庫管理器:SQLPro for SQLite for MacSQLite資料庫Mac
- Laravel Database——資料庫的 CRUD 操作原始碼分析LaravelDatabase資料庫原始碼
- 原始碼資料庫管理程式 (轉)原始碼資料庫
- 國產資料庫與開原始碼資料庫原始碼
- Native SQLite Manager for mac(SQLite資料庫管理器) 1.26.1簡體中文版SQLiteMac資料庫
- SOFA 原始碼分析 — 連線管理器原始碼
- SQLite Expert Professional資料庫開發管理SQLite資料庫
- 在Android中檢視和管理sqlite資料庫AndroidSQLite資料庫
- SQLPro for SQLite Mac(SQLite資料庫管理工具)SQLiteMac資料庫
- 原始碼管理:SVN原始碼管理器在ASP.NET VS中的使用注意事項原始碼ASP.NET
- PostgreSQL 原始碼解讀(7)- 插入資料#6(ExecProcNode和ExecPro...SQL原始碼
- 【PHP7原始碼分析】PHP7原始碼研究之淺談Zend虛擬機器PHP原始碼虛擬機
- 開源資料庫OceanBase原始碼解讀(九):tableAPI和OB多模型資料庫原始碼API模型
- jdbm開原始檔資料庫在全文檢索中的使用資料庫
- Java™ 教程(管理原始檔和類檔案)Java
- PHP原始碼研究PHP原始碼
- ICE原始碼研究原始碼
- 安卓第一個作品 檔案管理器 附原始碼帶詳細註釋安卓原始碼
- 大型HR原始碼人力資源管理(原始碼100%)原始碼
- 反編譯APK資原始檔與原始碼編譯APK原始碼
- PostgreSQL 原始碼解讀(8)- 插入資料#7(ExecutePlan)SQL原始碼
- 小米開源便籤Notes-原始碼研究(1)-匯出功能整體思路原始碼
- 小米開源便籤Notes-原始碼研究(2)-定時提醒的便籤原始碼
- 【Mybatis原始碼解析】- JDBC連線資料庫的原理和操作MyBatis原始碼JDBC資料庫
- 資料庫資源管理器(Database Resource Manager)資料庫Database
- Android 資料庫 ObjectBox 原始碼解析Android資料庫Object原始碼
- SQLPro Studio for Mac(資料庫管理器)SQLMac資料庫
- asp.net 檔案上傳和下載管理原始碼ASP.NET原始碼
- 在Ubuntu檔案管理器中檢視隱藏檔案和資料夾Ubuntu