|
|
|
|
|
|
|
|
|
// 创建笔记表的SQL语句
|
|
|
|
|
private static final String CREATE_NOTE_TABLE_SQL = "CREATE TABLE " + TABLE.NOTE + " ("
|
|
|
|
|
+ NoteColumns.ID + " TEXT PRIMARY KEY, "
|
|
|
|
|
+ NoteColumns.TITLE + " TEXT NOT NULL, "
|
|
|
|
|
+ NoteColumns.CONTENT + " TEXT NOT NULL, "
|
|
|
|
|
+ NoteColumns.CREATED_DATE + " INTEGER NOT NULL, "
|
|
|
|
|
+ NoteColumns.MODIFIED_DATE + " INTEGER NOT NULL, "
|
|
|
|
|
+ NoteColumns.TYPE + " INTEGER NOT NULL, "
|
|
|
|
|
+ NoteColumns.PARENT_ID + " TEXT NOT NULL, "
|
|
|
|
|
+ NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT '', "
|
|
|
|
|
+ NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0"
|
|
|
|
|
+ ");";
|
|
|
|
|
|
|
|
|
|
// 创建与笔记表相关的触发器的SQL语句
|
|
|
|
|
private static final String NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = "CREATE TRIGGER increase_folder_count_on_update AFTER UPDATE ON " + TABLE.NOTE
|
|
|
|
|
+ " BEGIN"
|
|
|
|
|
+ " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.COUNT + " = " + NoteColumns.COUNT + " + 1"
|
|
|
|
|
+ " WHERE " + NoteColumns.ID + " = new." + NoteColumns.PARENT_ID + ";"
|
|
|
|
|
+ " END;";
|
|
|
|
|
// 类似的触发器SQL语句省略...
|
|
|
|
|
|
|
|
|
|
// 创建数据表的SQL语句
|
|
|
|
|
private static final String CREATE_DATA_TABLE_SQL = "CREATE TABLE " + TABLE.DATA + " ("
|
|
|
|
|
+ DataColumns.ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
|
|
|
|
|
+ DataColumns.Note_ID + " TEXT NOT NULL, "
|
|
|
|
|
+ DataColumns.TYPE + " INTEGER NOT NULL, "
|
|
|
|
|
+ DataColumns.CONTENT + " TEXT NOT NULL, "
|
|
|
|
|
+ DataColumns.CREATED_DATE + " INTEGER NOT NULL"
|
|
|
|
|
+ ");";
|
|
|
|
|
|
|
|
|
|
// 创建与数据表相关的触发器的SQL语句
|
|
|
|
|
private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER = "CREATE TRIGGER update_note_content_on_insert AFTER INSERT ON " + TABLE.DATA
|
|
|
|
|
+ " BEGIN"
|
|
|
|
|
+ " UPDATE " + TABLE.NOTE + " SET " + NoteColumns.CONTENT + " = new." + DataColumns.CONTENT
|
|
|
|
|
+ " WHERE " + NoteColumns.ID + " = new." + DataColumns.Note_ID + ";"
|
|
|
|
|
+ " END;";
|
|
|
|
|
// 类似的触发器SQL语句省略...
|
|
|
|
|
|
|
|
|
|
// 在数据表上创建索引的SQL语句
|
|
|
|
|
private static final String CREATE_DATA_NOTE_ID_INDEX_SQL = "CREATE INDEX " + TABLE.DATA + "_note_id_index ON "
|
|
|
|
|
+ TABLE.DATA + " (" + DataColumns.Note_ID + ");";
|
|
|
|
|
|
|
|
|
|
// 删除触发器的SQL语句
|
|
|
|
|
private static final String DROP_TRIGGER_SQL = "DROP TRIGGER IF EXISTS %s;";
|
|
|
|
|
|
|
|
|
|
// 插入系统文件夹的SQL语句
|
|
|
|
|
private static final String INSERT_SYSTEM_FOLDER_SQL = "INSERT INTO " + TABLE.NOTE + " ("
|
|
|
|
|
+ NoteColumns.ID + ", "
|
|
|
|
|
+ NoteColumns.TYPE + ", "
|
|
|
|
|
+ NoteColumns.TITLE + ", "
|
|
|
|
|
+ NoteColumns.CONTENT + ", "
|
|
|
|
|
+ NoteColumns.CREATED_DATE + ", "
|
|
|
|
|
+ NoteColumns.MODIFIED_DATE + ", "
|
|
|
|
|
+ NoteColumns.PARENT_ID + ")"
|
|
|
|
|
+ " VALUES (?, ?, ?, ?, ?, ?, ?);";
|
|
|
|
|
|
|
|
|
|
// 更新笔记表的SQL语句
|
|
|
|
|
private static final String UPDATE_NOTE_TABLE_SQL = "UPDATE " + TABLE.NOTE + " SET "
|
|
|
|
|
+ NoteColumns.TITLE + " = ?, "
|
|
|
|
|
+ NoteColumns.CONTENT + " = ?, "
|
|
|
|
|
+ NoteColumns.MODIFIED_DATE + " = ?, "
|
|
|
|
|
+ NoteColumns.PARENT_ID + " = ?"
|
|
|
|
|
+ " WHERE " + NoteColumns.ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 删除笔记的SQL语句
|
|
|
|
|
private static final String DELETE_NOTE_SQL = "DELETE FROM " + TABLE.NOTE
|
|
|
|
|
+ " WHERE " + NoteColumns.ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 查询笔记的SQL语句
|
|
|
|
|
private static final String QUERY_NOTES_SQL = "SELECT * FROM " + TABLE.NOTE
|
|
|
|
|
+ " WHERE " + NoteColumns.PARENT_ID + " = ?"
|
|
|
|
|
+ " ORDER BY " + NoteColumns.MODIFIED_DATE + " DESC;";
|
|
|
|
|
|
|
|
|
|
// 按ID查询笔记的SQL语句
|
|
|
|
|
private static final String QUERY_NOTE_BY_ID_SQL = "SELECT * FROM " + TABLE.NOTE
|
|
|
|
|
+ " WHERE " + NoteColumns.ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 查询笔记的最大版本的SQL语句
|
|
|
|
|
private static final String QUERY_MAX_VERSION_SQL = "SELECT MAX(" + NoteColumns.VERSION + ") FROM " + TABLE.NOTE
|
|
|
|
|
+ " WHERE " + NoteColumns.ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 更新笔记版本的SQL语句
|
|
|
|
|
private static final String UPDATE_NOTE_VERSION_SQL = "UPDATE " + TABLE.NOTE + " SET "
|
|
|
|
|
+ NoteColumns.VERSION + " = ?"
|
|
|
|
|
+ " WHERE " + NoteColumns.ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 删除旧笔记的SQL语句
|
|
|
|
|
private static final String DELETE_OLD_NOTES_SQL = "DELETE FROM " + TABLE.NOTE
|
|
|
|
|
+ " WHERE " + NoteColumns.VERSION + " < ?;";
|
|
|
|
|
|
|
|
|
|
// 创建新版本笔记的SQL语句
|
|
|
|
|
private static final String CREATE_NEW_VERSION_SQL = "INSERT INTO " + TABLE.NOTE + " ("
|
|
|
|
|
+ NoteColumns.ID + ", "
|
|
|
|
|
+ NoteColumns.TITLE + ", "
|
|
|
|
|
+ NoteColumns.CONTENT + ", "
|
|
|
|
|
+ NoteColumns.CREATED_DATE + ", "
|
|
|
|
|
+ NoteColumns.MODIFIED_DATE + ", "
|
|
|
|
|
+ NoteColumns.TYPE + ", "
|
|
|
|
|
+ NoteColumns.PARENT_ID + ", "
|
|
|
|
|
+ NoteColumns.GTASK_ID + ", "
|
|
|
|
|
+ NoteColumns.VERSION + ")"
|
|
|
|
|
+ " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);";
|
|
|
|
|
|
|
|
|
|
// 按类型查询笔记的SQL语句
|
|
|
|
|
private static final String QUERY_NOTES_BY_TYPE_SQL = "SELECT * FROM " + TABLE.NOTE
|
|
|
|
|
+ " WHERE " + NoteColumns.TYPE + " = ?"
|
|
|
|
|
+ " ORDER BY " + NoteColumns.MODIFIED_DATE + " DESC;";
|
|
|
|
|
|
|
|
|
|
// 按标题查询笔记的SQL语句
|
|
|
|
|
private static final String QUERY_NOTES_BY_TITLE_SQL = "SELECT * FROM " + TABLE.NOTE
|
|
|
|
|
+ " WHERE " + NoteColumns.TITLE + " LIKE ?"
|
|
|
|
|
+ " ORDER BY " + NoteColumns.MODIFIED_DATE + " DESC;";
|
|
|
|
|
|
|
|
|
|
// 按内容查询笔记的SQL语句
|
|
|
|
|
private static final String QUERY_NOTES_BY_CONTENT_SQL = "SELECT * FROM " + TABLE.NOTE
|
|
|
|
|
+ " WHERE " + NoteColumns.CONTENT + " LIKE ?"
|
|
|
|
|
+ " ORDER BY " + NoteColumns.MODIFIED_DATE + " DESC;";
|
|
|
|
|
|
|
|
|
|
// 按日期范围查询笔记的SQL语句
|
|
|
|
|
private static final String QUERY_NOTES_BY_DATE_SQL = "SELECT * FROM " + TABLE.NOTE
|
|
|
|
|
+ " WHERE " + NoteColumns.CREATED_DATE + " BETWEEN ? AND ?"
|
|
|
|
|
+ " ORDER BY " + NoteColumns.MODIFIED_DATE + " DESC;";
|
|
|
|
|
|
|
|
|
|
// 按GTASK ID查询笔记的SQL语句
|
|
|
|
|
private static final String QUERY_NOTES_BY_GTASK_ID_SQL = "SELECT * FROM " + TABLE.NOTE
|
|
|
|
|
+ " WHERE " + NoteColumns.GTASK_ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 更新笔记的GTASK ID的SQL语句
|
|
|
|
|
private static final String UPDATE_NOTE_GTASK_ID_SQL = "UPDATE " + TABLE.NOTE + " SET "
|
|
|
|
|
+ NoteColumns.GTASK_ID + " = ?"
|
|
|
|
|
+ " WHERE " + NoteColumns.ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 查询回收站中的笔记的SQL语句
|
|
|
|
|
private static final String QUERY_TRASH_NOTES_SQL = "SELECT * FROM " + TABLE.NOTE
|
|
|
|
|
+ " WHERE " + NoteColumns.PARENT_ID + " = " + Notes.ID_TRASH_FOLER
|
|
|
|
|
+ " ORDER BY " + NoteColumns.MODIFIED_DATE + " DESC;";
|
|
|
|
|
|
|
|
|
|
// 从回收站恢复笔记的SQL语句
|
|
|
|
|
private static final String RESTORE_NOTE_FROM_TRASH_SQL = "UPDATE " + TABLE.NOTE + " SET "
|
|
|
|
|
+ NoteColumns.PARENT_ID + " = ?"
|
|
|
|
|
+ " WHERE " + NoteColumns.ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 永久删除笔记的SQL语句
|
|
|
|
|
private static final String PERMANENTLY_DELETE_NOTE_SQL = "DELETE FROM " + TABLE.NOTE
|
|
|
|
|
+ " WHERE " + NoteColumns.ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 查询文件夹中笔记数量的SQL语句
|
|
|
|
|
private static final String QUERY_FOLDER_COUNT_SQL = "SELECT COUNT(*) FROM " + TABLE.NOTE
|
|
|
|
|
+ " WHERE " + NoteColumns.PARENT_ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 更新文件夹中笔记数量的SQL语句
|
|
|
|
|
private static final String UPDATE_FOLDER_COUNT_SQL = "UPDATE " + TABLE.NOTE + " SET "
|
|
|
|
|
+ NoteColumns.COUNT + " = ?"
|
|
|
|
|
+ " WHERE " + NoteColumns.ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 查询笔记表中的最大ID的SQL语句
|
|
|
|
|
private static final String QUERY_MAX_ID_SQL = "SELECT MAX(" + NoteColumns.ID + ") FROM " + TABLE.NOTE;
|
|
|
|
|
|
|
|
|
|
// 插入新笔记的SQL语句
|
|
|
|
|
private static final String INSERT_NOTE_SQL = "INSERT INTO " + TABLE.NOTE + " ("
|
|
|
|
|
+ NoteColumns.ID + ", "
|
|
|
|
|
+ NoteColumns.TITLE + ", "
|
|
|
|
|
+ NoteColumns.CONTENT + ", "
|
|
|
|
|
+ NoteColumns.CREATED_DATE + ", "
|
|
|
|
|
+ NoteColumns.MODIFIED_DATE + ", "
|
|
|
|
|
+ NoteColumns.TYPE + ", "
|
|
|
|
|
+ NoteColumns.PARENT_ID + ")"
|
|
|
|
|
+ " VALUES (?, ?, ?, ?, ?, ?, ?);";
|
|
|
|
|
|
|
|
|
|
// 更新笔记标题的SQL语句
|
|
|
|
|
private static final String UPDATE_NOTE_TITLE_SQL = "UPDATE " + TABLE.NOTE + " SET "
|
|
|
|
|
+ NoteColumns.TITLE + " = ?"
|
|
|
|
|
+ " WHERE " + NoteColumns.ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 更新笔记内容的SQL语句
|
|
|
|
|
private static final String UPDATE_NOTE_CONTENT_SQL = "UPDATE " + TABLE.NOTE + " SET "
|
|
|
|
|
+ NoteColumns.CONTENT + " = ?"
|
|
|
|
|
+ " WHERE " + NoteColumns.ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 更新笔记修改日期的SQL语句
|
|
|
|
|
private static final String UPDATE_NOTE_MODIFIED_DATE_SQL = "UPDATE " + TABLE.NOTE + " SET "
|
|
|
|
|
+ NoteColumns.MODIFIED_DATE + " = ?"
|
|
|
|
|
+ " WHERE " + NoteColumns.ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 更新笔记父ID的SQL语句
|
|
|
|
|
private static final String UPDATE_NOTE_PARENT_ID_SQL = "UPDATE " + TABLE.NOTE + " SET "
|
|
|
|
|
+ NoteColumns.PARENT_ID + " = ?"
|
|
|
|
|
+ " WHERE " + NoteColumns.ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 删除文件夹中的笔记的SQL语句
|
|
|
|
|
private static final String DELETE_NOTES_IN_FOLDER_SQL = "DELETE FROM " + TABLE.NOTE
|
|
|
|
|
+ " WHERE " + NoteColumns.PARENT_ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 按父ID查询笔记的SQL语句
|
|
|
|
|
private static final String QUERY_NOTES_BY_PARENT_ID_SQL = "SELECT * FROM " + TABLE.NOTE
|
|
|
|
|
+ " WHERE " + NoteColumns.PARENT_ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 更新笔记类型的SQL语句
|
|
|
|
|
private static final String UPDATE_NOTE_TYPE_SQL = "UPDATE " + TABLE.NOTE + " SET "
|
|
|
|
|
+ NoteColumns.TYPE + " = ?"
|
|
|
|
|
+ " WHERE " + NoteColumns.ID + " = ?;";
|
|
|
|
|
|
|
|
|
|
// 按类型和父ID查询笔记的SQL语句
|
|
|
|
|
private static final String QUERY_NOTES_BY_TYPE_AND_PARENT_ID_SQL = "SELECT * FROM " + TABLE.NOTE
|
|
|
|
|
+ " WHERE " + NoteColumns.TYPE + " = ? AND "
|
|
|
|
|
+ NoteColumns.PARENT_ID + " = ?;"
|
|
|
|
|
+ " ORDER BY " + NoteColumns.MODIFIED_DATE + " DESC;";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 构造函数,初始化数据库帮助器。
|
|
|
|
|
*
|
|
|
|
|
* @param context 上下文对象
|
|
|
|
|
*/
|
|
|
|
|
public NotesDatabaseHelper(Context context) {
|
|
|
|
|
super(context, DB_NAME, null, DB_VERSION);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 创建笔记表。
|
|
|
|
|
*
|
|
|
|
|
* @param db 数据库对象
|
|
|
|
|
*/
|
|
|
|
|
public void createNoteTable(SQLiteDatabase db) {
|
|
|
|
|
db.execSQL(CREATE_NOTE_TABLE_SQL);
|
|
|
|
|
reCreateNoteTableTriggers(db);
|
|
|
|
|
createSystemFolder(db);
|
|
|
|
|
Log.d(TAG, "note table has been created");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 重新创建笔记表的触发器。
|
|
|
|
|
*
|
|
|
|
|
* @param db 数据库对象
|
|
|
|
|
*/
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 创建系统文件夹。
|
|
|
|
|
*
|
|
|
|
|
* @param db 数据库对象
|
|
|
|
|
*/
|
|
|
|
|
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
|