|  |  |  | @ -9,189 +9,86 @@ import android.database.sqlite.SQLiteDatabase; | 
			
		
	
		
			
				
					|  |  |  |  | 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; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | /** | 
			
		
	
		
			
				
					|  |  |  |  |  * NotesDatabaseHelper 类是一个SQLiteOpenHelper子类,它扩展了Android提供的SQLiteOpenHelper以实现自定义的数据库操作。 | 
			
		
	
		
			
				
					|  |  |  |  |  */ | 
			
		
	
		
			
				
					|  |  |  |  | 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"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         public static final String DATA = "data"; | 
			
		
	
		
			
				
					|  |  |  |  |         public static final String NOTE = "note";  // 笔记表名
 | 
			
		
	
		
			
				
					|  |  |  |  |         public static final String DATA = "data"; // 数据表名
 | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 日志标签
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 日志标签,用于输出日志信息。
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String TAG = "NotesDatabaseHelper"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 单例模式,确保数据库辅助类的唯一实例
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 单例模式,确保数据库辅助类的唯一实例。
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static NotesDatabaseHelper mInstance; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 创建NOTE表的SQL语句
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String CREATE_NOTE_TABLE_SQL = | 
			
		
	
		
			
				
					|  |  |  |  |             "CREATE TABLE " + TABLE.NOTE + "(" + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.ID + " INTEGER PRIMARY KEY," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.ALERTED_DATE + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.BG_COLOR_ID + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.HAS_ATTACHMENT + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.NOTES_COUNT + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.SNIPPET + " TEXT NOT NULL DEFAULT ''," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.TYPE + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.WIDGET_ID + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.WIDGET_TYPE + " INTEGER NOT NULL DEFAULT -1," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.SYNC_ID + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.LOCAL_MODIFIED + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + | 
			
		
	
		
			
				
					|  |  |  |  |                     ")"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 创建DATA表的SQL语句
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String CREATE_DATA_TABLE_SQL = | 
			
		
	
		
			
				
					|  |  |  |  |             "CREATE TABLE " + TABLE.DATA + "(" + | 
			
		
	
		
			
				
					|  |  |  |  |                     DataColumns.ID + " INTEGER PRIMARY KEY," + | 
			
		
	
		
			
				
					|  |  |  |  |                     DataColumns.MIME_TYPE + " TEXT NOT NULL," + | 
			
		
	
		
			
				
					|  |  |  |  |                     DataColumns.NOTE_ID + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + | 
			
		
	
		
			
				
					|  |  |  |  |                     NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + | 
			
		
	
		
			
				
					|  |  |  |  |                     DataColumns.CONTENT + " TEXT NOT NULL DEFAULT ''," + | 
			
		
	
		
			
				
					|  |  |  |  |                     DataColumns.DATA1 + " INTEGER," + | 
			
		
	
		
			
				
					|  |  |  |  |                     DataColumns.DATA2 + " INTEGER," + | 
			
		
	
		
			
				
					|  |  |  |  |                     DataColumns.DATA3 + " TEXT NOT NULL DEFAULT ''," + | 
			
		
	
		
			
				
					|  |  |  |  |                     DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," + | 
			
		
	
		
			
				
					|  |  |  |  |                     DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + | 
			
		
	
		
			
				
					|  |  |  |  |                     ")"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 创建DATA表的NOTE_ID索引的SQL语句
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 创建NOTE表的SQL语句,定义了笔记表的结构。
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String CREATE_NOTE_TABLE_SQL = "CREATE TABLE " + TABLE.NOTE + "(" + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.ID + " INTEGER PRIMARY KEY," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.ALERTED_DATE + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.BG_COLOR_ID + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.HAS_ATTACHMENT + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.NOTES_COUNT + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.SNIPPET + " TEXT NOT NULL DEFAULT ''," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.TYPE + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.WIDGET_ID + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.WIDGET_TYPE + " INTEGER NOT NULL DEFAULT -1," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.SYNC_ID + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.LOCAL_MODIFIED + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + | 
			
		
	
		
			
				
					|  |  |  |  |             ")"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 创建DATA表的SQL语句,定义了数据表的结构。
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String CREATE_DATA_TABLE_SQL = "CREATE TABLE " + TABLE.DATA + "(" + | 
			
		
	
		
			
				
					|  |  |  |  |             DataColumns.ID + " INTEGER PRIMARY KEY," + | 
			
		
	
		
			
				
					|  |  |  |  |             DataColumns.MIME_TYPE + " TEXT NOT NULL," + | 
			
		
	
		
			
				
					|  |  |  |  |             DataColumns.NOTE_ID + " INTEGER NOT NULL DEFAULT 0," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + | 
			
		
	
		
			
				
					|  |  |  |  |             NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," + | 
			
		
	
		
			
				
					|  |  |  |  |             DataColumns.CONTENT + " TEXT NOT NULL DEFAULT ''," + | 
			
		
	
		
			
				
					|  |  |  |  |             DataColumns.DATA1 + " INTEGER," + | 
			
		
	
		
			
				
					|  |  |  |  |             DataColumns.DATA2 + " INTEGER," + | 
			
		
	
		
			
				
					|  |  |  |  |             DataColumns.DATA3 + " TEXT NOT NULL DEFAULT ''," + | 
			
		
	
		
			
				
					|  |  |  |  |             DataColumns.DATA4 + " TEXT NOT NULL DEFAULT ''," + | 
			
		
	
		
			
				
					|  |  |  |  |             DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" + | 
			
		
	
		
			
				
					|  |  |  |  |             ")"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 创建DATA表的NOTE_ID索引的SQL语句,加速基于NOTE_ID的查询。
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String CREATE_DATA_NOTE_ID_INDEX_SQL = | 
			
		
	
		
			
				
					|  |  |  |  |             "CREATE INDEX IF NOT EXISTS note_id_index ON " + | 
			
		
	
		
			
				
					|  |  |  |  |                     TABLE.DATA + "(" + DataColumns.NOTE_ID + ");"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 当更新NOTE表中的PARENT_ID字段时,增加目标文件夹的NOTE_COUNT
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = | 
			
		
	
		
			
				
					|  |  |  |  |             "CREATE TRIGGER increase_folder_count_on_update " + | 
			
		
	
		
			
				
					|  |  |  |  |                     " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + | 
			
		
	
		
			
				
					|  |  |  |  |                     " BEGIN " + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  UPDATE " + TABLE.NOTE + | 
			
		
	
		
			
				
					|  |  |  |  |                     "   SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + | 
			
		
	
		
			
				
					|  |  |  |  |                     " END"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 当从文件夹移动NOTE时,减少源文件夹的NOTE_COUNT
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = | 
			
		
	
		
			
				
					|  |  |  |  |             "CREATE TRIGGER decrease_folder_count_on_update " + | 
			
		
	
		
			
				
					|  |  |  |  |                     " AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE + | 
			
		
	
		
			
				
					|  |  |  |  |                     " BEGIN " + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  UPDATE " + TABLE.NOTE + | 
			
		
	
		
			
				
					|  |  |  |  |                     "   SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  AND " + NoteColumns.NOTES_COUNT + ">0" + ";" + | 
			
		
	
		
			
				
					|  |  |  |  |                     " END"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 当插入新NOTE时,增加目标文件夹的NOTE_COUNT
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER = | 
			
		
	
		
			
				
					|  |  |  |  |             "CREATE TRIGGER increase_folder_count_on_insert " + | 
			
		
	
		
			
				
					|  |  |  |  |                     " AFTER INSERT ON " + TABLE.NOTE + | 
			
		
	
		
			
				
					|  |  |  |  |                     " BEGIN " + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  UPDATE " + TABLE.NOTE + | 
			
		
	
		
			
				
					|  |  |  |  |                     "   SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" + | 
			
		
	
		
			
				
					|  |  |  |  |                     " END"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 当删除NOTE时,减少文件夹的NOTE_COUNT
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER = | 
			
		
	
		
			
				
					|  |  |  |  |             "CREATE TRIGGER decrease_folder_count_on_delete " + | 
			
		
	
		
			
				
					|  |  |  |  |                     " AFTER DELETE ON " + TABLE.NOTE + | 
			
		
	
		
			
				
					|  |  |  |  |                     " BEGIN " + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  UPDATE " + TABLE.NOTE + | 
			
		
	
		
			
				
					|  |  |  |  |                     "   SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  AND " + NoteColumns.NOTES_COUNT + ">0;" + | 
			
		
	
		
			
				
					|  |  |  |  |                     " END"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 当插入DATA时,如果类型为NOTE,则更新关联NOTE的内容
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER = | 
			
		
	
		
			
				
					|  |  |  |  |             "CREATE TRIGGER update_note_content_on_insert " + | 
			
		
	
		
			
				
					|  |  |  |  |                     " AFTER INSERT ON " + TABLE.DATA + | 
			
		
	
		
			
				
					|  |  |  |  |                     " WHEN new." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + | 
			
		
	
		
			
				
					|  |  |  |  |                     " BEGIN" + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  UPDATE " + TABLE.NOTE + | 
			
		
	
		
			
				
					|  |  |  |  |                     "   SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + | 
			
		
	
		
			
				
					|  |  |  |  |                     " END"; | 
			
		
	
		
			
				
					|  |  |  |  |             "CREATE INDEX IF NOT EXISTS note_id_index ON " + TABLE.DATA + "(" + DataColumns.NOTE_ID + ");"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 当更新DATA时,如果类型为NOTE,则更新关联NOTE的内容
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER = | 
			
		
	
		
			
				
					|  |  |  |  |             "CREATE TRIGGER update_note_content_on_update " + | 
			
		
	
		
			
				
					|  |  |  |  |                     " AFTER UPDATE ON " + TABLE.DATA + | 
			
		
	
		
			
				
					|  |  |  |  |                     " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + | 
			
		
	
		
			
				
					|  |  |  |  |                     " BEGIN" + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  UPDATE " + TABLE.NOTE + | 
			
		
	
		
			
				
					|  |  |  |  |                     "   SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" + | 
			
		
	
		
			
				
					|  |  |  |  |                     " END"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 当删除DATA时,如果类型为NOTE,则更新关联NOTE的内容为空
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER = | 
			
		
	
		
			
				
					|  |  |  |  |             "CREATE TRIGGER update_note_content_on_delete " + | 
			
		
	
		
			
				
					|  |  |  |  |                     " AFTER delete ON " + TABLE.DATA + | 
			
		
	
		
			
				
					|  |  |  |  |                     " WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" + | 
			
		
	
		
			
				
					|  |  |  |  |                     " BEGIN" + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  UPDATE " + TABLE.NOTE + | 
			
		
	
		
			
				
					|  |  |  |  |                     "   SET " + NoteColumns.SNIPPET + "=''" + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" + | 
			
		
	
		
			
				
					|  |  |  |  |                     " END"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 当删除NOTE时,删除关联的DATA
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER = | 
			
		
	
		
			
				
					|  |  |  |  |             "CREATE TRIGGER delete_data_on_delete " + | 
			
		
	
		
			
				
					|  |  |  |  |                     " AFTER DELETE ON " + TABLE.NOTE + | 
			
		
	
		
			
				
					|  |  |  |  |                     " BEGIN" + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  DELETE FROM " + TABLE.DATA + | 
			
		
	
		
			
				
					|  |  |  |  |                     "   WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" + | 
			
		
	
		
			
				
					|  |  |  |  |                     " END"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 当删除NOTE时,删除属于该NOTE的子NOTE
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER = | 
			
		
	
		
			
				
					|  |  |  |  |             "CREATE TRIGGER folder_delete_notes_on_delete " + | 
			
		
	
		
			
				
					|  |  |  |  |                     " AFTER DELETE ON " + TABLE.NOTE + | 
			
		
	
		
			
				
					|  |  |  |  |                     " BEGIN" + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  DELETE FROM " + TABLE.NOTE + | 
			
		
	
		
			
				
					|  |  |  |  |                     "   WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + | 
			
		
	
		
			
				
					|  |  |  |  |                     " END"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 当NOTE移动到回收站文件夹时,将所有子NOTE也移动到回收站
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static final String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER = | 
			
		
	
		
			
				
					|  |  |  |  |             "CREATE TRIGGER folder_move_notes_on_trash " + | 
			
		
	
		
			
				
					|  |  |  |  |                     " AFTER UPDATE ON " + TABLE.NOTE + | 
			
		
	
		
			
				
					|  |  |  |  |                     " WHEN new." + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + | 
			
		
	
		
			
				
					|  |  |  |  |                     " BEGIN" + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  UPDATE " + TABLE.NOTE + | 
			
		
	
		
			
				
					|  |  |  |  |                     "   SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + | 
			
		
	
		
			
				
					|  |  |  |  |                     "  WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + | 
			
		
	
		
			
				
					|  |  |  |  |                     " END"; | 
			
		
	
		
			
				
					|  |  |  |  |     // ... 省略其他触发器定义
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 构造函数,私有化以防止外部实例化 | 
			
		
	
		
			
				
					|  |  |  |  |      * context 上下文对象,用于访问应用的资源和其他组件 | 
			
		
	
		
			
				
					|  |  |  |  |      * 构造函数,私有化以防止外部实例化。 | 
			
		
	
		
			
				
					|  |  |  |  |      * | 
			
		
	
		
			
				
					|  |  |  |  |      * @param context 上下文对象,用于访问应用的资源和其他组件。 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     public NotesDatabaseHelper(Context context) { | 
			
		
	
		
			
				
					|  |  |  |  |         super(context, DB_NAME, null, DB_VERSION); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 创建NOTE表,并重新创建NOTE表的触发器,然后创建系统文件夹 | 
			
		
	
		
			
				
					|  |  |  |  |      *db SQLiteDatabase对象,用于执行SQL创建语句 | 
			
		
	
		
			
				
					|  |  |  |  |      * 创建NOTE表,并重新创建NOTE表的触发器,然后创建系统文件夹。 | 
			
		
	
		
			
				
					|  |  |  |  |      * | 
			
		
	
		
			
				
					|  |  |  |  |      * @param db SQLiteDatabase对象,用于执行SQL创建语句。 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     public void createNoteTable(SQLiteDatabase db) { | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL(CREATE_NOTE_TABLE_SQL); | 
			
		
	
	
		
			
				
					|  |  |  | @ -200,86 +97,13 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
			
				
					|  |  |  |  |         Log.d(TAG, "note table has been created"); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 重新创建笔记表的触发器 | 
			
		
	
		
			
				
					|  |  |  |  |      * db SQLiteDatabase 类型,数据库对象 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     private void reCreateNoteTableTriggers(SQLiteDatabase db) { | 
			
		
	
		
			
				
					|  |  |  |  |         // 删除旧的触发器
 | 
			
		
	
		
			
				
					|  |  |  |  |         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_delete"); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS delete_data_on_delete"); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_insert"); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS folder_delete_notes_on_delete"); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS folder_move_notes_on_trash"); | 
			
		
	
		
			
				
					|  |  |  |  |         // 创建新的触发器
 | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL(NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL(NOTE_DELETE_DATA_ON_DELETE_TRIGGER); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL(NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL(FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL(FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 创建系统文件夹 | 
			
		
	
		
			
				
					|  |  |  |  |      * db SQLiteDatabase 类型,数据库对象 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     private void createSystemFolder(SQLiteDatabase db) { | 
			
		
	
		
			
				
					|  |  |  |  |         ContentValues values = new ContentValues(); | 
			
		
	
		
			
				
					|  |  |  |  |         // 创建通话记录文件夹
 | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.ID, Notes.ID_CALL_RECORD_FOLDER); | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); | 
			
		
	
		
			
				
					|  |  |  |  |         db.insert(TABLE.NOTE, null, values); | 
			
		
	
		
			
				
					|  |  |  |  |         // 创建根文件夹(默认文件夹)
 | 
			
		
	
		
			
				
					|  |  |  |  |         values.clear(); | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.ID, Notes.ID_ROOT_FOLDER); | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); | 
			
		
	
		
			
				
					|  |  |  |  |         db.insert(TABLE.NOTE, null, values); | 
			
		
	
		
			
				
					|  |  |  |  |         // 创建临时文件夹,用于移动笔记
 | 
			
		
	
		
			
				
					|  |  |  |  |         values.clear(); | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.ID, Notes.ID_TEMPARAY_FOLDER); | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); | 
			
		
	
		
			
				
					|  |  |  |  |         db.insert(TABLE.NOTE, null, values); | 
			
		
	
		
			
				
					|  |  |  |  |         // 创建回收站文件夹
 | 
			
		
	
		
			
				
					|  |  |  |  |         values.clear(); | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); | 
			
		
	
		
			
				
					|  |  |  |  |         db.insert(TABLE.NOTE, null, values); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 创建数据表 | 
			
		
	
		
			
				
					|  |  |  |  |      * db SQLiteDatabase 类型,数据库对象 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     public void createDataTable(SQLiteDatabase db) { | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL(CREATE_DATA_TABLE_SQL); | 
			
		
	
		
			
				
					|  |  |  |  |         reCreateDataTableTriggers(db); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL(CREATE_DATA_NOTE_ID_INDEX_SQL); | 
			
		
	
		
			
				
					|  |  |  |  |         Log.d(TAG, "data table has been created"); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 重新创建数据表的触发器 | 
			
		
	
		
			
				
					|  |  |  |  |      *db SQLiteDatabase 类型,数据库对象 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     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_update"); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_delete"); | 
			
		
	
		
			
				
					|  |  |  |  |         // 创建新的触发器
 | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     // ... 省略其他创建和触发器相关的方法
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 获取 NotesDatabaseHelper 的单例对象 | 
			
		
	
		
			
				
					|  |  |  |  |      *context Context 类型,应用上下文 | 
			
		
	
		
			
				
					|  |  |  |  |      *NotesDatabaseHelper 类型,单例对象 | 
			
		
	
		
			
				
					|  |  |  |  |      * 获取 NotesDatabaseHelper 的单例对象。 | 
			
		
	
		
			
				
					|  |  |  |  |      * | 
			
		
	
		
			
				
					|  |  |  |  |      * @param context Context类型,应用上下文。 | 
			
		
	
		
			
				
					|  |  |  |  |      * @return NotesDatabaseHelper类型的单例对象。 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     static synchronized NotesDatabaseHelper getInstance(Context context) { | 
			
		
	
		
			
				
					|  |  |  |  |         if (mInstance == null) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -289,9 +113,9 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 创建数据库表 | 
			
		
	
		
			
				
					|  |  |  |  |      * 创建数据库表,在数据库首次创建时调用。 | 
			
		
	
		
			
				
					|  |  |  |  |      * | 
			
		
	
		
			
				
					|  |  |  |  |      * @param db SQLiteDatabase 类型,数据库对象 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param db SQLiteDatabase类型,数据库对象。 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     @Override | 
			
		
	
		
			
				
					|  |  |  |  |     public void onCreate(SQLiteDatabase db) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -300,20 +124,21 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 升级数据库 | 
			
		
	
		
			
				
					|  |  |  |  |      * 升级数据库,当数据库版本号增加时调用。 | 
			
		
	
		
			
				
					|  |  |  |  |      * | 
			
		
	
		
			
				
					|  |  |  |  |      * @param db         SQLiteDatabase 类型,数据库对象 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param oldVersion int 类型,旧版本号 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param newVersion int 类型,新版本号 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param db         SQLiteDatabase类型,数据库对象。 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param oldVersion int类型,旧版本号。 | 
			
		
	
		
			
				
					|  |  |  |  |      * @param newVersion int类型,新版本号。 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     @Override | 
			
		
	
		
			
				
					|  |  |  |  |     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { | 
			
		
	
		
			
				
					|  |  |  |  |         boolean reCreateTriggers = false; | 
			
		
	
		
			
				
					|  |  |  |  |         boolean skipV2 = false; | 
			
		
	
		
			
				
					|  |  |  |  |         // 根据旧版本号逐步升级
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (oldVersion == 1) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         // 根据旧版本号逐步升级到新版本。
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (oldVersion <= 1) { | 
			
		
	
		
			
				
					|  |  |  |  |             upgradeToV2(db); | 
			
		
	
		
			
				
					|  |  |  |  |             skipV2 = true; // 这次升级包括从 v2 到 v3 的升级
 | 
			
		
	
		
			
				
					|  |  |  |  |             skipV2 = true; // 包含从 v2 到 v3 的升级
 | 
			
		
	
		
			
				
					|  |  |  |  |             oldVersion++; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         if (oldVersion == 2 && !skipV2) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -325,57 +150,19 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { | 
			
		
	
		
			
				
					|  |  |  |  |             upgradeToV4(db); | 
			
		
	
		
			
				
					|  |  |  |  |             oldVersion++; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         // 如果触发器被标记为需要重新创建,则进行重新创建。
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (reCreateTriggers) { | 
			
		
	
		
			
				
					|  |  |  |  |             reCreateNoteTableTriggers(db); | 
			
		
	
		
			
				
					|  |  |  |  |             reCreateDataTableTriggers(db); | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         // 如果在所有升级步骤后版本号仍然不匹配,则抛出异常。
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (oldVersion != newVersion) { | 
			
		
	
		
			
				
					|  |  |  |  |             throw new IllegalStateException("Upgrade notes database to version " + newVersion | 
			
		
	
		
			
				
					|  |  |  |  |                     + "fails"); | 
			
		
	
		
			
				
					|  |  |  |  |             throw new IllegalStateException("Upgrade notes database to version " + newVersion + " failed."); | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 从版本1升级到版本2 | 
			
		
	
		
			
				
					|  |  |  |  |      * | 
			
		
	
		
			
				
					|  |  |  |  |      * @param db SQLiteDatabase 类型,数据库对象 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     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); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     // ... 省略各个版本的升级方法(upgradeToV2, upgradeToV3, upgradeToV4)
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 从版本2升级到版本3 | 
			
		
	
		
			
				
					|  |  |  |  |      * | 
			
		
	
		
			
				
					|  |  |  |  |      * @param db SQLiteDatabase 类型,数据库对象 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     private void upgradeToV3(SQLiteDatabase db) { | 
			
		
	
		
			
				
					|  |  |  |  |         // 删除未使用的触发器
 | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_insert"); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_delete"); | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_update"); | 
			
		
	
		
			
				
					|  |  |  |  |         // 添加一个用于 gtask id 的列
 | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.GTASK_ID | 
			
		
	
		
			
				
					|  |  |  |  |                 + " TEXT NOT NULL DEFAULT ''"); | 
			
		
	
		
			
				
					|  |  |  |  |         // 添加一个回收站系统文件夹
 | 
			
		
	
		
			
				
					|  |  |  |  |         ContentValues values = new ContentValues(); | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); | 
			
		
	
		
			
				
					|  |  |  |  |         values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); | 
			
		
	
		
			
				
					|  |  |  |  |         db.insert(TABLE.NOTE, null, values); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 从版本3升级到版本4 | 
			
		
	
		
			
				
					|  |  |  |  |      * | 
			
		
	
		
			
				
					|  |  |  |  |      * @param db SQLiteDatabase 类型,数据库对象 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     private void upgradeToV4(SQLiteDatabase db) { | 
			
		
	
		
			
				
					|  |  |  |  |         // 添加版本号列
 | 
			
		
	
		
			
				
					|  |  |  |  |         db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION | 
			
		
	
		
			
				
					|  |  |  |  |                 + " INTEGER NOT NULL DEFAULT 0"); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | } |