|  |  | @ -26,12 +26,17 @@ import net.micode.notes.data.Notes.DataColumns; | 
			
		
	
		
		
			
				
					
					|  |  |  | import net.micode.notes.data.Notes.DataConstants; |  |  |  | import net.micode.notes.data.Notes.DataConstants; | 
			
		
	
		
		
			
				
					
					|  |  |  | import net.micode.notes.data.Notes.NoteColumns; |  |  |  | import net.micode.notes.data.Notes.NoteColumns; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | /** | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  * 用于打开、创建和管理Note应用程序的数据库 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  */ | 
			
		
	
		
		
			
				
					
					|  |  |  | public class NotesDatabaseHelper extends SQLiteOpenHelper { |  |  |  | public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static final String DB_NAME = "note.db"; |  |  |  |     private static final String DB_NAME = "note.db"; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static final int DB_VERSION = 4; |  |  |  |     private static final int DB_VERSION = 4; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 这是一个接口,内部定义了一个笔记表和一个数据表的表名常量。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     public interface TABLE { |  |  |  |     public interface TABLE { | 
			
		
	
		
		
			
				
					
					|  |  |  |         public static final String NOTE = "note"; |  |  |  |         public static final String NOTE = "note"; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -42,6 +47,9 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static NotesDatabaseHelper mInstance; |  |  |  |     private static NotesDatabaseHelper mInstance; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 该字符串表示用于创建“note”表的SQL语句。该表用于存储笔记的基本信息。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static final String CREATE_NOTE_TABLE_SQL = |  |  |  |     private static final String CREATE_NOTE_TABLE_SQL = | 
			
		
	
		
		
			
				
					
					|  |  |  |         "CREATE TABLE " + TABLE.NOTE + "(" + |  |  |  |         "CREATE TABLE " + TABLE.NOTE + "(" + | 
			
		
	
		
		
			
				
					
					|  |  |  |             NoteColumns.ID + " INTEGER PRIMARY KEY," + |  |  |  |             NoteColumns.ID + " INTEGER PRIMARY KEY," + | 
			
		
	
	
		
		
			
				
					|  |  | @ -63,6 +71,9 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  |             NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + |  |  |  |             NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + | 
			
		
	
		
		
			
				
					
					|  |  |  |         ")"; |  |  |  |         ")"; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * SQL语句用于创建“data”表的字符串常量 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static final String CREATE_DATA_TABLE_SQL = |  |  |  |     private static final String CREATE_DATA_TABLE_SQL = | 
			
		
	
		
		
			
				
					
					|  |  |  |         "CREATE TABLE " + TABLE.DATA + "(" + |  |  |  |         "CREATE TABLE " + TABLE.DATA + "(" + | 
			
		
	
		
		
			
				
					
					|  |  |  |             DataColumns.ID + " INTEGER PRIMARY KEY," + |  |  |  |             DataColumns.ID + " INTEGER PRIMARY KEY," + | 
			
		
	
	
		
		
			
				
					|  |  | @ -78,12 +89,16 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  |             DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + |  |  |  |             DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + | 
			
		
	
		
		
			
				
					
					|  |  |  |         ")"; |  |  |  |         ")"; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * SQL语句在"data"表上创建索引的字符串常量 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static final String CREATE_DATA_NOTE_ID_INDEX_SQL = |  |  |  |     private static final String CREATE_DATA_NOTE_ID_INDEX_SQL = | 
			
		
	
		
		
			
				
					
					|  |  |  |         "CREATE INDEX IF NOT EXISTS note_id_index ON " + |  |  |  |         "CREATE INDEX IF NOT EXISTS note_id_index ON " + | 
			
		
	
		
		
			
				
					
					|  |  |  |         TABLE.DATA + "(" + DataColumns.NOTE_ID + ");"; |  |  |  |         TABLE.DATA + "(" + DataColumns.NOTE_ID + ");"; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     /** |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |      * Increase folder's note count when move note to the folder |  |  |  |      * Increase folder's note count when move note to the folder | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 在将笔记移动到文件夹时增加文件夹的笔记计数 | 
			
		
	
		
		
			
				
					
					|  |  |  |      */ |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static final String NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = |  |  |  |     private static final String NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = | 
			
		
	
		
		
			
				
					
					|  |  |  |         "CREATE TRIGGER increase_folder_count_on_update "+ |  |  |  |         "CREATE TRIGGER increase_folder_count_on_update "+ | 
			
		
	
	
		
		
			
				
					|  |  | @ -96,6 +111,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     /** |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |      * Decrease folder's note count when move note from folder |  |  |  |      * Decrease folder's note count when move note from folder | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 在将笔记移出文件夹时减少文件夹的笔记计数 | 
			
		
	
		
		
			
				
					
					|  |  |  |      */ |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static final String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = |  |  |  |     private static final String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = | 
			
		
	
		
		
			
				
					
					|  |  |  |         "CREATE TRIGGER decrease_folder_count_on_update " + |  |  |  |         "CREATE TRIGGER decrease_folder_count_on_update " + | 
			
		
	
	
		
		
			
				
					|  |  | @ -109,6 +125,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     /** |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |      * Increase folder's note count when insert new note to the folder |  |  |  |      * Increase folder's note count when insert new note to the folder | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 此触发器将在向数据库中添加新的笔记时自动触发。当向某个文件夹添加新的笔记时,此触发器将使该文件夹的“notes_count”值增加 1。 | 
			
		
	
		
		
			
				
					
					|  |  |  |      */ |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static final String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER = |  |  |  |     private static final String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER = | 
			
		
	
		
		
			
				
					
					|  |  |  |         "CREATE TRIGGER increase_folder_count_on_insert " + |  |  |  |         "CREATE TRIGGER increase_folder_count_on_insert " + | 
			
		
	
	
		
		
			
				
					|  |  | @ -121,6 +138,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     /** |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |      * Decrease folder's note count when delete note from the folder |  |  |  |      * Decrease folder's note count when delete note from the folder | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 此触发器将在从数据库中删除笔记时自动触发。当从某个文件夹删除笔记时,此触发器将使该文件夹的“notes_count”值减少 1。 | 
			
		
	
		
		
			
				
					
					|  |  |  |      */ |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static final String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER = |  |  |  |     private static final String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER = | 
			
		
	
		
		
			
				
					
					|  |  |  |         "CREATE TRIGGER decrease_folder_count_on_delete " + |  |  |  |         "CREATE TRIGGER decrease_folder_count_on_delete " + | 
			
		
	
	
		
		
			
				
					|  |  | @ -134,6 +152,8 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     /** |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |      * Update note's content when insert data with type {@link DataConstants#NOTE} |  |  |  |      * Update note's content when insert data with type {@link DataConstants#NOTE} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 此触发器将在向数据库中添加一个数据记录时自动触发。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 当添加类型为“note”的数据记录时,此触发器将更新笔记的“snippet”列,将其设置为新增数据记录的“content”列值。 | 
			
		
	
		
		
			
				
					
					|  |  |  |      */ |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER = |  |  |  |     private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER = | 
			
		
	
		
		
			
				
					
					|  |  |  |         "CREATE TRIGGER update_note_content_on_insert " + |  |  |  |         "CREATE TRIGGER update_note_content_on_insert " + | 
			
		
	
	
		
		
			
				
					|  |  | @ -147,6 +167,8 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     /** |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |      * Update note's content when data with {@link DataConstants#NOTE} type has changed |  |  |  |      * Update note's content when data with {@link DataConstants#NOTE} type has changed | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 此触发器将在数据库中的数据记录被更新时自动触发。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 当更新的数据记录类型为“note”时,此触发器将更新笔记的“snippet”列,将其设置为更新后的数据记录的“content”列的值。 | 
			
		
	
		
		
			
				
					
					|  |  |  |      */ |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER = |  |  |  |     private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER = | 
			
		
	
		
		
			
				
					
					|  |  |  |         "CREATE TRIGGER update_note_content_on_update " + |  |  |  |         "CREATE TRIGGER update_note_content_on_update " + | 
			
		
	
	
		
		
			
				
					|  |  | @ -160,6 +182,8 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     /** |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |      * Update note's content when data with {@link DataConstants#NOTE} type has deleted |  |  |  |      * Update note's content when data with {@link DataConstants#NOTE} type has deleted | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 此触发器将在从数据库中删除一个数据记录时自动触发。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 当被删除的数据记录类型为“note”时,此触发器将更新笔记的“snippet”列,并将其设置为空字符串。 | 
			
		
	
		
		
			
				
					
					|  |  |  |      */ |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER = |  |  |  |     private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER = | 
			
		
	
		
		
			
				
					
					|  |  |  |         "CREATE TRIGGER update_note_content_on_delete " + |  |  |  |         "CREATE TRIGGER update_note_content_on_delete " + | 
			
		
	
	
		
		
			
				
					|  |  | @ -173,6 +197,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     /** |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |      * Delete datas belong to note which has been deleted |  |  |  |      * Delete datas belong to note which has been deleted | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 此触发器将在从数据库中删除笔记时自动触发。它将删除与被删除笔记相关联的所有数据记录。 | 
			
		
	
		
		
			
				
					
					|  |  |  |      */ |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER = |  |  |  |     private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER = | 
			
		
	
		
		
			
				
					
					|  |  |  |         "CREATE TRIGGER delete_data_on_delete " + |  |  |  |         "CREATE TRIGGER delete_data_on_delete " + | 
			
		
	
	
		
		
			
				
					|  |  | @ -184,6 +209,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     /** |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |      * Delete notes belong to folder which has been deleted |  |  |  |      * Delete notes belong to folder which has been deleted | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 此触发器将在从数据库中删除文件夹时自动触发,它将删除该文件夹下的所有笔记。 | 
			
		
	
		
		
			
				
					
					|  |  |  |      */ |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER = |  |  |  |     private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER = | 
			
		
	
		
		
			
				
					
					|  |  |  |         "CREATE TRIGGER folder_delete_notes_on_delete " + |  |  |  |         "CREATE TRIGGER folder_delete_notes_on_delete " + | 
			
		
	
	
		
		
			
				
					|  |  | @ -195,6 +221,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     /** |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |      * Move notes belong to folder which has been moved to trash folder |  |  |  |      * Move notes belong to folder which has been moved to trash folder | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 此触发器将在将某个文件夹移动到回收站时自动触发,它会将该文件夹下的所有笔记也移动到回收站。 | 
			
		
	
		
		
			
				
					
					|  |  |  |      */ |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static final String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER = |  |  |  |     private static final String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER = | 
			
		
	
		
		
			
				
					
					|  |  |  |         "CREATE TRIGGER folder_move_notes_on_trash " + |  |  |  |         "CREATE TRIGGER folder_move_notes_on_trash " + | 
			
		
	
	
		
		
			
				
					|  |  | @ -206,10 +233,20 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  |         "  WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + |  |  |  |         "  WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + | 
			
		
	
		
		
			
				
					
					|  |  |  |         " END"; |  |  |  |         " END"; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 这是 NotesDatabaseHelper 类的构造函数,用于创建数据库,并将数据库名称、版本等参数传递给基类 SQLiteOpenHelper 的构造函数。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * @param context | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     public NotesDatabaseHelper(Context context) { |  |  |  |     public NotesDatabaseHelper(Context context) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         super(context, DB_NAME, null, DB_VERSION); |  |  |  |         super(context, DB_NAME, null, DB_VERSION); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 此方法用于在给定的 SQLiteDatabase 对象上创建“note”表。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 它执行 CREATE_NOTE_TABLE_SQL 常量中指定的 SQL 语句, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 并调用 reCreateNoteTableTriggers 和 createSystemFolder 方法以重置触发器并创建系统文件夹。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * @param db | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     public void createNoteTable(SQLiteDatabase db) { |  |  |  |     public void createNoteTable(SQLiteDatabase db) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         db.execSQL(CREATE_NOTE_TABLE_SQL); |  |  |  |         db.execSQL(CREATE_NOTE_TABLE_SQL); | 
			
		
	
		
		
			
				
					
					|  |  |  |         reCreateNoteTableTriggers(db); |  |  |  |         reCreateNoteTableTriggers(db); | 
			
		
	
	
		
		
			
				
					|  |  | @ -217,6 +254,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  |         Log.d(TAG, "note table has been created"); |  |  |  |         Log.d(TAG, "note table has been created"); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 此私有方法用于重置所有触发器,即在调用此方法之前删除所有现有的触发器,然后重新创建所有触发器。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * @param db | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private void reCreateNoteTableTriggers(SQLiteDatabase db) { |  |  |  |     private void reCreateNoteTableTriggers(SQLiteDatabase db) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_update"); |  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_update"); | 
			
		
	
		
		
			
				
					
					|  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS decrease_folder_count_on_update"); |  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS decrease_folder_count_on_update"); | 
			
		
	
	
		
		
			
				
					|  |  | @ -235,6 +276,12 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  |         db.execSQL(FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER); |  |  |  |         db.execSQL(FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 此私有方法用于向数据库中插入四个系统文件夹。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 它通过为每个文件夹创建一个 ContentValues 对象来添加数据,并将其插入名为 "note" 的数据库表中。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 其中,每个文件夹具有唯一的 ID,类型为 TYPE_SYSTEM。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * @param db | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private void createSystemFolder(SQLiteDatabase db) { |  |  |  |     private void createSystemFolder(SQLiteDatabase db) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         ContentValues values = new ContentValues(); |  |  |  |         ContentValues values = new ContentValues(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -270,6 +317,12 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  |         db.insert(TABLE.NOTE, null, values); |  |  |  |         db.insert(TABLE.NOTE, null, values); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 此方法用于创建数据表。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 它执行 CREATE_DATA_TABLE_SQL 常量中指定的 SQL 语句,并调用 reCreateDataTableTriggers 方法以重置触发器。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 最后,它还创建了 CREATE_DATA_NOTE_ID_INDEX_SQL 常量中指定的 ID 索引。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * @param db | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     public void createDataTable(SQLiteDatabase db) { |  |  |  |     public void createDataTable(SQLiteDatabase db) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         db.execSQL(CREATE_DATA_TABLE_SQL); |  |  |  |         db.execSQL(CREATE_DATA_TABLE_SQL); | 
			
		
	
		
		
			
				
					
					|  |  |  |         reCreateDataTableTriggers(db); |  |  |  |         reCreateDataTableTriggers(db); | 
			
		
	
	
		
		
			
				
					|  |  | @ -277,6 +330,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  |         Log.d(TAG, "data table has been created"); |  |  |  |         Log.d(TAG, "data table has been created"); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 用于重置增删改触发器,删除所有现有的触发器,然后重新创建触发器。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * @param db | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private void reCreateDataTableTriggers(SQLiteDatabase db) { |  |  |  |     private void reCreateDataTableTriggers(SQLiteDatabase db) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_insert"); |  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_insert"); | 
			
		
	
		
		
			
				
					
					|  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_update"); |  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_update"); | 
			
		
	
	
		
		
			
				
					|  |  | @ -287,6 +344,12 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  |         db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER); |  |  |  |         db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 此方法是 NotesDatabaseHelper 类的静态方法,通过传递上下文对象来获取数据库的实例。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 它将确保在多线程环境中只有一个实例创建。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * @param context | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * @return | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     static synchronized NotesDatabaseHelper getInstance(Context context) { |  |  |  |     static synchronized NotesDatabaseHelper getInstance(Context context) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (mInstance == null) { |  |  |  |         if (mInstance == null) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             mInstance = new NotesDatabaseHelper(context); |  |  |  |             mInstance = new NotesDatabaseHelper(context); | 
			
		
	
	
		
		
			
				
					|  |  | @ -294,12 +357,25 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  |         return mInstance; |  |  |  |         return mInstance; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 数据库被第一次创建时,此方法将调用。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * createNoteTable() 和 createDataTable() 两个方法将被调用,用于创建表和触发器。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * @param db | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     @Override |  |  |  |     @Override | 
			
		
	
		
		
			
				
					
					|  |  |  |     public void onCreate(SQLiteDatabase db) { |  |  |  |     public void onCreate(SQLiteDatabase db) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         createNoteTable(db); |  |  |  |         createNoteTable(db); | 
			
		
	
		
		
			
				
					
					|  |  |  |         createDataTable(db); |  |  |  |         createDataTable(db); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 当数据库需要更新到一个新版本时,此方法将被调用。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 它通过指定旧版本和新版本号来确定进行哪些更新, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 每个更新都会调用 upgradeToV2()、upgradeToV3() 和 upgradeToV4() 方法之一,以升级数据库结构。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * @param db | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * @param oldVersion | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * @param newVersion | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     @Override |  |  |  |     @Override | 
			
		
	
		
		
			
				
					
					|  |  |  |     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { |  |  |  |     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         boolean reCreateTriggers = false; |  |  |  |         boolean reCreateTriggers = false; | 
			
		
	
	
		
		
			
				
					|  |  | @ -333,6 +409,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 此方法执行从 v1 升级到 v2 的数据迁移。它首先删除原来的表,然后创建新表,重新建立触发器。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * @param db | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private void upgradeToV2(SQLiteDatabase db) { |  |  |  |     private void upgradeToV2(SQLiteDatabase db) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         db.execSQL("DROP TABLE IF EXISTS " + TABLE.NOTE); |  |  |  |         db.execSQL("DROP TABLE IF EXISTS " + TABLE.NOTE); | 
			
		
	
		
		
			
				
					
					|  |  |  |         db.execSQL("DROP TABLE IF EXISTS " + TABLE.DATA); |  |  |  |         db.execSQL("DROP TABLE IF EXISTS " + TABLE.DATA); | 
			
		
	
	
		
		
			
				
					|  |  | @ -340,6 +420,11 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  |         createDataTable(db); |  |  |  |         createDataTable(db); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 此方法执行从 v2 升级到 v3 的数据迁移。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 它删除不再需要的触发器并添加新的 note Gtask Id 列,以便允许在 Google Tasks 中同步任务到笔记应用程序中。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * @param db | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private void upgradeToV3(SQLiteDatabase db) { |  |  |  |     private void upgradeToV3(SQLiteDatabase db) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         // drop unused triggers
 |  |  |  |         // drop unused triggers
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_insert"); |  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_insert"); | 
			
		
	
	
		
		
			
				
					|  |  | @ -355,6 +440,10 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
		
			
				
					
					|  |  |  |         db.insert(TABLE.NOTE, null, values); |  |  |  |         db.insert(TABLE.NOTE, null, values); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 此方法执行从 v3 升级到 v4 的数据迁移。它为 notes 表添加了版本号列,以便在后续升级中进行版本验证。 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * @param db | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private void upgradeToV4(SQLiteDatabase db) { |  |  |  |     private void upgradeToV4(SQLiteDatabase db) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION |  |  |  |         db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION | 
			
		
	
		
		
			
				
					
					|  |  |  |                 + " INTEGER NOT NULL DEFAULT 0"); |  |  |  |                 + " INTEGER NOT NULL DEFAULT 0"); | 
			
		
	
	
		
		
			
				
					|  |  | 
 |