|  |  |  | @ -16,22 +16,31 @@ | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | package net.micode.notes.data; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | import android.content.ContentValues; | 
			
		
	
		
			
				
					|  |  |  |  | import android.content.ContentValues;//就是用于保存一些数据(string boolean ...)信息,这些信息可以被数据库操作时使用。
 | 
			
		
	
		
			
				
					|  |  |  |  | import android.content.Context; | 
			
		
	
		
			
				
					|  |  |  |  | import android.database.sqlite.SQLiteDatabase; | 
			
		
	
		
			
				
					|  |  |  |  | import android.database.sqlite.SQLiteOpenHelper; | 
			
		
	
		
			
				
					|  |  |  |  | import android.database.sqlite.SQLiteDatabase;//主要提供了对应于添加、删除、更新、查询的操作方法: insert()、delete()、update()和query()。配合content.values
 | 
			
		
	
		
			
				
					|  |  |  |  | import android.database.sqlite.SQLiteOpenHelper;//用来管理数据的创建和版本更新
 | 
			
		
	
		
			
				
					|  |  |  |  | import android.util.Log; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | import net.micode.notes.data.Notes.DataColumns; | 
			
		
	
		
			
				
					|  |  |  |  | import net.micode.notes.data.Notes.DataConstants; | 
			
		
	
		
			
				
					|  |  |  |  | import net.micode.notes.data.Notes.NoteColumns; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | /** | 
			
		
	
		
			
				
					|  |  |  |  |   * @Package:        net.micode.notes.data | 
			
		
	
		
			
				
					|  |  |  |  |   * @ClassName:      NotesDatabaseHelper | 
			
		
	
		
			
				
					|  |  |  |  |   * @Description:    便签数据库操作底层实现 | 
			
		
	
		
			
				
					|  |  |  |  |   * @Author:         WuShuxian | 
			
		
	
		
			
				
					|  |  |  |  |   * @CreateDate:     2023/12/21 19:46 | 
			
		
	
		
			
				
					|  |  |  |  |   * @Version:        1.0 | 
			
		
	
		
			
				
					|  |  |  |  |  */ | 
			
		
	
		
			
				
					|  |  |  |  | public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String DB_NAME = "note.db"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final int DB_VERSION = 4; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |     * 接口,创建数据库表头 | 
			
		
	
		
			
				
					|  |  |  |  |     */ | 
			
		
	
		
			
				
					|  |  |  |  |     public interface TABLE { | 
			
		
	
		
			
				
					|  |  |  |  |         public static final String NOTE = "note"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -41,7 +50,9 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String TAG = "NotesDatabaseHelper"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static NotesDatabaseHelper mInstance; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |     * 便签的属性数据库 | 
			
		
	
		
			
				
					|  |  |  |  |     */ | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String CREATE_NOTE_TABLE_SQL = | 
			
		
	
		
			
				
					|  |  |  |  |         "CREATE TABLE " + TABLE.NOTE + "(" + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.ID + " INTEGER PRIMARY KEY," + | 
			
		
	
	
		
			
				
					|  |  |  | @ -62,7 +73,9 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + | 
			
		
	
		
			
				
					|  |  |  |  |         ")"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |     * 便签的内容数据库 | 
			
		
	
		
			
				
					|  |  |  |  |     */ | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String CREATE_DATA_TABLE_SQL = | 
			
		
	
		
			
				
					|  |  |  |  |         "CREATE TABLE " + TABLE.DATA + "(" + | 
			
		
	
		
			
				
					|  |  |  |  |             DataColumns.ID + " INTEGER PRIMARY KEY," + | 
			
		
	
	
		
			
				
					|  |  |  | @ -83,7 +96,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
			
				
					|  |  |  |  |         TABLE.DATA + "(" + DataColumns.NOTE_ID + ");"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * Increase folder's note count when move note to the folder | 
			
		
	
		
			
				
					|  |  |  |  |      * 文件夹内移进便签时需要修改的数据 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = | 
			
		
	
		
			
				
					|  |  |  |  |         "CREATE TRIGGER increase_folder_count_on_update "+ | 
			
		
	
	
		
			
				
					|  |  |  | @ -95,7 +108,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
			
				
					|  |  |  |  |         " END"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * Decrease folder's note count when move note from folder | 
			
		
	
		
			
				
					|  |  |  |  |      * 便签移出文件夹时需要修改的数据 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = | 
			
		
	
		
			
				
					|  |  |  |  |         "CREATE TRIGGER decrease_folder_count_on_update " + | 
			
		
	
	
		
			
				
					|  |  |  | @ -108,7 +121,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
			
				
					|  |  |  |  |         " END"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * Increase folder's note count when insert new note to the folder | 
			
		
	
		
			
				
					|  |  |  |  |      * 插入(新建)便签时需要修改的数据 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER = | 
			
		
	
		
			
				
					|  |  |  |  |         "CREATE TRIGGER increase_folder_count_on_insert " + | 
			
		
	
	
		
			
				
					|  |  |  | @ -120,7 +133,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
			
				
					|  |  |  |  |         " END"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * Decrease folder's note count when delete note from the folder | 
			
		
	
		
			
				
					|  |  |  |  |      * 删除便签时需要修改的数据 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER = | 
			
		
	
		
			
				
					|  |  |  |  |         "CREATE TRIGGER decrease_folder_count_on_delete " + | 
			
		
	
	
		
			
				
					|  |  |  | @ -234,36 +247,35 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL(FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL(FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |      /** | 
			
		
	
		
			
				
					|  |  |  |  |       * @method          createSystemFolder | 
			
		
	
		
			
				
					|  |  |  |  |       * @description:    创建系统缺省文件夹:通话记录、缺省根目录、临时文件夹、回收文件夹 | 
			
		
	
		
			
				
					|  |  |  |  |       * @date:           2023/12/21 20:19 | 
			
		
	
		
			
				
					|  |  |  |  |       * @author:         WuShuxian | 
			
		
	
		
			
				
					|  |  |  |  |       * @param:          db | 
			
		
	
		
			
				
					|  |  |  |  |       * @return:         void | 
			
		
	
		
			
				
					|  |  |  |  |       */ | 
			
		
	
		
			
				
					|  |  |  |  |     private void createSystemFolder(SQLiteDatabase db) { | 
			
		
	
		
			
				
					|  |  |  |  |         ContentValues values = new ContentValues(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         /** | 
			
		
	
		
			
				
					|  |  |  |  |          * call record foler for call notes | 
			
		
	
		
			
				
					|  |  |  |  |          */ | 
			
		
	
		
			
				
					|  |  |  |  |         //通话记录文件夹
 | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.ID, Notes.ID_CALL_RECORD_FOLDER); | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); | 
			
		
	
		
			
				
					|  |  |  |  |         db.insert(TABLE.NOTE, null, values); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         /** | 
			
		
	
		
			
				
					|  |  |  |  |          * root folder which is default folder | 
			
		
	
		
			
				
					|  |  |  |  |          */ | 
			
		
	
		
			
				
					|  |  |  |  |         //缺省根目录
 | 
			
		
	
		
			
				
					|  |  |  |  |         values.clear(); | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.ID, Notes.ID_ROOT_FOLDER); | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); | 
			
		
	
		
			
				
					|  |  |  |  |         db.insert(TABLE.NOTE, null, values); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         /** | 
			
		
	
		
			
				
					|  |  |  |  |          * temporary folder which is used for moving note | 
			
		
	
		
			
				
					|  |  |  |  |          */ | 
			
		
	
		
			
				
					|  |  |  |  |         //临时文件夹
 | 
			
		
	
		
			
				
					|  |  |  |  |         values.clear(); | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.ID, Notes.ID_TEMPARAY_FOLDER); | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); | 
			
		
	
		
			
				
					|  |  |  |  |         db.insert(TABLE.NOTE, null, values); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         /** | 
			
		
	
		
			
				
					|  |  |  |  |          * create trash folder | 
			
		
	
		
			
				
					|  |  |  |  |          */ | 
			
		
	
		
			
				
					|  |  |  |  |         //回收站文件夹
 | 
			
		
	
		
			
				
					|  |  |  |  |         values.clear(); | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); | 
			
		
	
	
		
			
				
					|  |  |  | @ -296,27 +308,34 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     @Override | 
			
		
	
		
			
				
					|  |  |  |  |     public void onCreate(SQLiteDatabase db) { | 
			
		
	
		
			
				
					|  |  |  |  |         createNoteTable(db); | 
			
		
	
		
			
				
					|  |  |  |  |         createDataTable(db); | 
			
		
	
		
			
				
					|  |  |  |  |         createNoteTable(db);//属性数据库
 | 
			
		
	
		
			
				
					|  |  |  |  |         createDataTable(db);//内容数据库
 | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |      /** | 
			
		
	
		
			
				
					|  |  |  |  |       * @method          onUpgrade | 
			
		
	
		
			
				
					|  |  |  |  |       * @description:    便签版本更新?没有使用者判断不了 | 
			
		
	
		
			
				
					|  |  |  |  |       * @date:           2023/12/21 20:42 | 
			
		
	
		
			
				
					|  |  |  |  |       * @author:         WuShuxian | 
			
		
	
		
			
				
					|  |  |  |  |       * @param: | 
			
		
	
		
			
				
					|  |  |  |  |       * @return: | 
			
		
	
		
			
				
					|  |  |  |  |       */ | 
			
		
	
		
			
				
					|  |  |  |  |     @Override | 
			
		
	
		
			
				
					|  |  |  |  |     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { | 
			
		
	
		
			
				
					|  |  |  |  |         boolean reCreateTriggers = false; | 
			
		
	
		
			
				
					|  |  |  |  |         boolean skipV2 = false; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         //V1->V2
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (oldVersion == 1) { | 
			
		
	
		
			
				
					|  |  |  |  |             upgradeToV2(db); | 
			
		
	
		
			
				
					|  |  |  |  |             skipV2 = true; // this upgrade including the upgrade from v2 to v3
 | 
			
		
	
		
			
				
					|  |  |  |  |             oldVersion++; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         //V2->V3
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (oldVersion == 2 && !skipV2) { | 
			
		
	
		
			
				
					|  |  |  |  |             upgradeToV3(db); | 
			
		
	
		
			
				
					|  |  |  |  |             reCreateTriggers = true; | 
			
		
	
		
			
				
					|  |  |  |  |             oldVersion++; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         //V3->V4
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (oldVersion == 3) { | 
			
		
	
		
			
				
					|  |  |  |  |             upgradeToV4(db); | 
			
		
	
		
			
				
					|  |  |  |  |             oldVersion++; | 
			
		
	
	
		
			
				
					|  |  |  | @ -332,14 +351,18 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
			
				
					|  |  |  |  |                     + "fails"); | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |     * 升级到V2,修改相应数据库 | 
			
		
	
		
			
				
					|  |  |  |  |     */ | 
			
		
	
		
			
				
					|  |  |  |  |     private void upgradeToV2(SQLiteDatabase db) { | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL("DROP TABLE IF EXISTS " + TABLE.NOTE); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL("DROP TABLE IF EXISTS " + TABLE.DATA); | 
			
		
	
		
			
				
					|  |  |  |  |         createNoteTable(db); | 
			
		
	
		
			
				
					|  |  |  |  |         createDataTable(db); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |     * 升级到V3,修改相应数据库 | 
			
		
	
		
			
				
					|  |  |  |  |     */ | 
			
		
	
		
			
				
					|  |  |  |  |     private void upgradeToV3(SQLiteDatabase db) { | 
			
		
	
		
			
				
					|  |  |  |  |         // drop unused triggers
 | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_insert"); | 
			
		
	
	
		
			
				
					|  |  |  | @ -354,7 +377,9 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); | 
			
		
	
		
			
				
					|  |  |  |  |         db.insert(TABLE.NOTE, null, values); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |     * 升级到V4,修改相应数据库 | 
			
		
	
		
			
				
					|  |  |  |  |     */ | 
			
		
	
		
			
				
					|  |  |  |  |     private void upgradeToV4(SQLiteDatabase db) { | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION | 
			
		
	
		
			
				
					|  |  |  |  |                 + " INTEGER NOT NULL DEFAULT 0"); | 
			
		
	
	
		
			
				
					|  |  |  | 
 |