|
|
|
@ -15,26 +15,6 @@
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
* @ProjectName: minode
|
|
|
|
|
* @Package: net.micode.notes.data
|
|
|
|
|
* @ClassName: NotesDatabaseHelper
|
|
|
|
|
* @Description: 该类继承自 SQLiteOpenHelper,用于创建和管理笔记应用的数据库。
|
|
|
|
|
它定义了数据库的名称、版本、表名、创建表和触发器的 SQL 语句,并
|
|
|
|
|
实现了数据库的创建、升级等操作。通过该类,可以方便地进行笔记数据的存储和管理。
|
|
|
|
|
* @Author: 齐景熙
|
|
|
|
|
* @Date: 2024-12-21 22:10
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/*主要成员变量和常量:
|
|
|
|
|
DB_NAME:数据库的名称。
|
|
|
|
|
DB_VERSION:数据库的版本号。
|
|
|
|
|
TABLE:定义了数据库表名的接口。
|
|
|
|
|
TAG:用于日志记录的标签。
|
|
|
|
|
mInstance:用于实现单例模式的静态实例变量。
|
|
|
|
|
CREATE_NOTE_TABLE_SQL、CREATE_DATA_TABLE_SQL 等:创建笔记表和数据表的 SQL 语句。
|
|
|
|
|
NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER 等:定义了数据库触发器的 SQL 语句,用于在特定操作后自动更新数据。 */
|
|
|
|
|
package net.micode.notes.data;
|
|
|
|
|
|
|
|
|
|
import android.content.ContentValues;
|
|
|
|
@ -48,21 +28,36 @@ import net.micode.notes.data.Notes.DataConstants;
|
|
|
|
|
import net.micode.notes.data.Notes.NoteColumns;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class NotesDatabaseHelper extends SQLiteOpenHelper {
|
|
|
|
|
private static final String DB_NAME = "note.db";
|
|
|
|
|
package net.micode.notes.data;
|
|
|
|
|
|
|
|
|
|
private static final int DB_VERSION = 5;
|
|
|
|
|
import android.content.Context;
|
|
|
|
|
import android.database.sqlite.SQLiteDatabase;
|
|
|
|
|
import android.database.sqlite.SQLiteOpenHelper;
|
|
|
|
|
import android.util.Log;
|
|
|
|
|
|
|
|
|
|
public interface TABLE {
|
|
|
|
|
public static final String NOTE = "note";
|
|
|
|
|
/**
|
|
|
|
|
* NotesDatabaseHelper 类用于管理便签应用的数据库。
|
|
|
|
|
* 它继承自 SQLiteOpenHelper,提供了数据库的创建、升级和版本管理功能。
|
|
|
|
|
*/
|
|
|
|
|
public class NotesDatabaseHelper extends SQLiteOpenHelper {
|
|
|
|
|
private static final String DB_NAME = "note.db"; // 数据库文件名
|
|
|
|
|
private static final int DB_VERSION = 5; // 数据库版本
|
|
|
|
|
|
|
|
|
|
public static final String DATA = "data";
|
|
|
|
|
/**
|
|
|
|
|
* 定义数据库表名的接口。
|
|
|
|
|
*/
|
|
|
|
|
public interface TABLE {
|
|
|
|
|
public static final String NOTE = "note"; // 便签表名
|
|
|
|
|
public static final String DATA = "data"; // 数据表名
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static final String TAG = "NotesDatabaseHelper";
|
|
|
|
|
private static final String TAG = "NotesDatabaseHelper"; // 日志标签
|
|
|
|
|
|
|
|
|
|
private static NotesDatabaseHelper mInstance;
|
|
|
|
|
private static NotesDatabaseHelper mInstance; // 单例对象
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 创建便签表的 SQL 语句。
|
|
|
|
|
*/
|
|
|
|
|
private static final String CREATE_NOTE_TABLE_SQL =
|
|
|
|
|
"CREATE TABLE " + TABLE.NOTE + "(" +
|
|
|
|
|
NoteColumns.ID + " INTEGER PRIMARY KEY," +
|
|
|
|
@ -85,6 +80,9 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
|
|
|
|
|
NoteColumns.TOP + " INTEGER NOT NULL DEFAULT 0" +
|
|
|
|
|
")";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 创建数据表的 SQL 语句。
|
|
|
|
|
*/
|
|
|
|
|
private static final String CREATE_DATA_TABLE_SQL =
|
|
|
|
|
"CREATE TABLE " + TABLE.DATA + "(" +
|
|
|
|
|
DataColumns.ID + " INTEGER PRIMARY KEY," +
|
|
|
|
@ -100,15 +98,18 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
|
|
|
|
|
DataColumns.DATA5 + " TEXT NOT NULL DEFAULT ''" +
|
|
|
|
|
")";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 创建数据表的索引 SQL 语句。
|
|
|
|
|
*/
|
|
|
|
|
private static final String CREATE_DATA_NOTE_ID_INDEX_SQL =
|
|
|
|
|
"CREATE INDEX IF NOT EXISTS note_id_index ON " +
|
|
|
|
|
TABLE.DATA + "(" + DataColumns.NOTE_ID + ");";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Increase folder's note count when move note to the folder
|
|
|
|
|
* 创建便签表的触发器,用于在更新便签的父文件夹ID时增加文件夹的便签计数。
|
|
|
|
|
*/
|
|
|
|
|
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 " +
|
|
|
|
|
" AFTER UPDATE OF " + NoteColumns.PARENT_ID + " ON " + TABLE.NOTE +
|
|
|
|
|
" BEGIN " +
|
|
|
|
|
" UPDATE " + TABLE.NOTE +
|
|
|
|
@ -117,7 +118,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
|
|
|
|
|
" END";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Decrease folder's note count when move note from folder
|
|
|
|
|
* 创建便签表的触发器,用于在更新便签的父文件夹ID时减少文件夹的便签计数。
|
|
|
|
|
*/
|
|
|
|
|
private static final String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER =
|
|
|
|
|
"CREATE TRIGGER decrease_folder_count_on_update " +
|
|
|
|
@ -130,7 +131,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 " +
|
|
|
|
@ -142,7 +143,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 " +
|
|
|
|
@ -155,7 +156,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
|
|
|
|
|
" END";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Update note's content when insert data with type {@link DataConstants#NOTE}
|
|
|
|
|
* 创建数据表的触发器,用于在插入数据时更新便签的内容。
|
|
|
|
|
*/
|
|
|
|
|
private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER =
|
|
|
|
|
"CREATE TRIGGER update_note_content_on_insert " +
|
|
|
|
@ -168,7 +169,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
|
|
|
|
|
" END";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Update note's content when data with {@link DataConstants#NOTE} type has changed
|
|
|
|
|
* 创建数据表的触发器,用于在更新数据时更新便签的内容。
|
|
|
|
|
*/
|
|
|
|
|
private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER =
|
|
|
|
|
"CREATE TRIGGER update_note_content_on_update " +
|
|
|
|
@ -181,7 +182,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
|
|
|
|
|
" END";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Update note's content when data with {@link DataConstants#NOTE} type has deleted
|
|
|
|
|
* 创建数据表的触发器,用于在删除数据时更新便签的内容。
|
|
|
|
|
*/
|
|
|
|
|
private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER =
|
|
|
|
|
"CREATE TRIGGER update_note_content_on_delete " +
|
|
|
|
@ -194,7 +195,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
|
|
|
|
|
" END";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Delete datas belong to note which has been deleted
|
|
|
|
|
* 创建便签表的触发器,用于在删除便签时删除相关数据。
|
|
|
|
|
*/
|
|
|
|
|
private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER =
|
|
|
|
|
"CREATE TRIGGER delete_data_on_delete " +
|
|
|
|
@ -205,7 +206,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
|
|
|
|
|
" END";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Delete notes belong to folder which has been deleted
|
|
|
|
|
* 创建便签表的触发器,用于在删除文件夹时删除相关便签。
|
|
|
|
|
*/
|
|
|
|
|
private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER =
|
|
|
|
|
"CREATE TRIGGER folder_delete_notes_on_delete " +
|
|
|
|
@ -216,41 +217,30 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
|
|
|
|
|
" END";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Move notes belong to folder which has been moved to trash folder
|
|
|
|
|
* 创建便签表的触发器,用于在移动文件夹到回收站时移动相关便签。
|
|
|
|
|
*/
|
|
|
|
|
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 +
|
|
|
|
|
" WHEN new." + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLDER +
|
|
|
|
|
" BEGIN" +
|
|
|
|
|
" UPDATE " + TABLE.NOTE +
|
|
|
|
|
" SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER +
|
|
|
|
|
" SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLDER +
|
|
|
|
|
" WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" +
|
|
|
|
|
" END";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method NotesDatabaseHelper
|
|
|
|
|
* @description 构造函数,用于初始化 NotesDatabaseHelper 实例。调用父类的构造函数,传入上下文、
|
|
|
|
|
数据库名称、工厂和数据库版本号,完成数据库帮助者的创建。
|
|
|
|
|
* @date: 2024-12-21 22:10
|
|
|
|
|
* @author: 齐景熙
|
|
|
|
|
*/
|
|
|
|
|
/*参数:
|
|
|
|
|
context:上下文对象,用于访问应用程序的资源和功能。 */
|
|
|
|
|
* 构造函数。
|
|
|
|
|
* @param context 应用上下文
|
|
|
|
|
*/
|
|
|
|
|
public NotesDatabaseHelper(Context context) {
|
|
|
|
|
super(context, DB_NAME, null, DB_VERSION);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method createNoteTable
|
|
|
|
|
* @description 创建笔记表。执行创建笔记表的 SQL 语句,并调用 reCreateNoteTableTriggers 方法重新
|
|
|
|
|
创建笔记表的触发器,最后创建系统文件夹。
|
|
|
|
|
* @date: 2024-12-21 22:13
|
|
|
|
|
* @author: 齐景熙
|
|
|
|
|
*/
|
|
|
|
|
/*参数:
|
|
|
|
|
db:可写的数据库对象,用于执行 SQL 语句。 */
|
|
|
|
|
* 创建便签表。
|
|
|
|
|
* @param db 数据库对象
|
|
|
|
|
*/
|
|
|
|
|
public void createNoteTable(SQLiteDatabase db) {
|
|
|
|
|
db.execSQL(CREATE_NOTE_TABLE_SQL);
|
|
|
|
|
reCreateNoteTableTriggers(db);
|
|
|
|
@ -258,16 +248,10 @@ db:可写的数据库对象,用于执行 SQL 语句。 */
|
|
|
|
|
Log.d(TAG, "note table has been created");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method reCreateNoteTableTriggers
|
|
|
|
|
* @description 重新创建笔记表的触发器。先删除已存在的触发器,然后依次创建增加文件夹笔记数量、减少文件
|
|
|
|
|
夹笔记数量、删除笔记数据、移动笔记到回收站等触发器。
|
|
|
|
|
* @date: 2024-12-21 22:15
|
|
|
|
|
* @author: 齐景熙
|
|
|
|
|
*/
|
|
|
|
|
/*参数:
|
|
|
|
|
db:可写的数据库对象,用于执行 SQL 语句。 */
|
|
|
|
|
* 重新创建便签表的触发器。
|
|
|
|
|
* @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");
|
|
|
|
@ -287,55 +271,32 @@ db:可写的数据库对象,用于执行 SQL 语句。 */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method createSystemFolder
|
|
|
|
|
* @description 创建系统文件夹。使用 ContentValues 设置系统文件夹的 ID 和类型,然后依次插入通话记录
|
|
|
|
|
文件夹、根文件夹、临时文件夹和回收站文件夹到笔记表中。
|
|
|
|
|
* @date: 2024-12-21 22:20
|
|
|
|
|
* @author: 齐景熙
|
|
|
|
|
*/
|
|
|
|
|
/*参数:
|
|
|
|
|
db:可写的数据库对象,用于执行插入操作。 */
|
|
|
|
|
* 创建系统文件夹。
|
|
|
|
|
* @param db 数据库对象
|
|
|
|
|
*/
|
|
|
|
|
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.ID, Notes.ID_TRASH_FOLDER);
|
|
|
|
|
values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM);
|
|
|
|
|
db.insert(TABLE.NOTE, null, values);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method createDataTable
|
|
|
|
|
* @description 创建数据表。执行创建数据表的 SQL 语句,调用 reCreateDataTableTriggers 方法重新创建数据表的触发器,并创建数据表的索引。
|
|
|
|
|
* @date: 2024-12-21 22:23
|
|
|
|
|
* @author: 齐景熙
|
|
|
|
|
*/
|
|
|
|
|
* 创建数据表。
|
|
|
|
|
* @param db 数据库对象
|
|
|
|
|
*/
|
|
|
|
|
public void createDataTable(SQLiteDatabase db) {
|
|
|
|
|
db.execSQL(CREATE_DATA_TABLE_SQL);
|
|
|
|
|
reCreateDataTableTriggers(db);
|
|
|
|
@ -343,13 +304,10 @@ db:可写的数据库对象,用于执行插入操作。 */
|
|
|
|
|
Log.d(TAG, "data table has been created");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method reCreateDataTableTriggers
|
|
|
|
|
* @description 重新创建数据表的触发器。先删除已存在的触发器,然后依次创建更新笔记内容的触发器。
|
|
|
|
|
* @date: 2024-12-21 22:25
|
|
|
|
|
* @author: 齐景熙
|
|
|
|
|
*/
|
|
|
|
|
* 重新创建数据表的触发器。
|
|
|
|
|
* @param 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_update");
|
|
|
|
@ -361,11 +319,10 @@ db:可写的数据库对象,用于执行插入操作。 */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method getInstance
|
|
|
|
|
* @description 获取 NotesDatabaseHelper 的单例实例。如果实例不存在,则创建一个新的实例;否则,返回已存在的实例。
|
|
|
|
|
* @date: 2024-12-21 22:30
|
|
|
|
|
* @author: 齐景熙
|
|
|
|
|
*/
|
|
|
|
|
* 获取单例对象。
|
|
|
|
|
* @param context 应用上下文
|
|
|
|
|
* @return 单例对象
|
|
|
|
|
*/
|
|
|
|
|
static synchronized NotesDatabaseHelper getInstance(Context context) {
|
|
|
|
|
if (mInstance == null) {
|
|
|
|
|
mInstance = new NotesDatabaseHelper(context);
|
|
|
|
@ -373,31 +330,22 @@ db:可写的数据库对象,用于执行插入操作。 */
|
|
|
|
|
return mInstance;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method onCreate
|
|
|
|
|
* @description 数据库创建时的回调方法。调用 createNoteTable 和 createDataTable 方法创建笔记表和数据表。
|
|
|
|
|
* @date: 2024-12-21 22:40
|
|
|
|
|
* @author: 齐景熙
|
|
|
|
|
*/
|
|
|
|
|
* 创建数据库时调用。
|
|
|
|
|
* @param db 数据库对象
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void onCreate(SQLiteDatabase db) {
|
|
|
|
|
createNoteTable(db);
|
|
|
|
|
createDataTable(db);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method onUpgrade
|
|
|
|
|
* @description 数据库版本升级时的回调方法。根据旧版本号和新版本号,依次调用相应的升级方法
|
|
|
|
|
(如 upgradeToV2、upgradeToV3 等),并在需要时重新创建触发器。如果旧版本号和新版本号不匹配,则抛出异常。
|
|
|
|
|
* @date: 2024-12-21 22:47
|
|
|
|
|
* @author: 齐景熙
|
|
|
|
|
*/
|
|
|
|
|
/*参数:
|
|
|
|
|
db:可写的数据库对象,用于执行升级操作。
|
|
|
|
|
oldVersion:旧的数据库版本号。
|
|
|
|
|
newVersion:新的数据库版本号。 */
|
|
|
|
|
* 数据库版本升级时调用。
|
|
|
|
|
* @param db 数据库对象
|
|
|
|
|
* @param oldVersion 旧版本号
|
|
|
|
|
* @param newVersion 新版本号
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
|
|
|
|
boolean reCreateTriggers = false;
|
|
|
|
@ -432,17 +380,14 @@ newVersion:新的数据库版本号。 */
|
|
|
|
|
|
|
|
|
|
if (oldVersion != newVersion) {
|
|
|
|
|
throw new IllegalStateException("Upgrade notes database to version " + newVersion
|
|
|
|
|
+ "fails");
|
|
|
|
|
+ " fails");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method upgradeToV2
|
|
|
|
|
* @description 升级数据库到版本 2。删除旧的笔记表和数据表,然后重新创建笔记表和数据表。
|
|
|
|
|
* @date: 2024-12-21 22:51
|
|
|
|
|
* @author: 齐景熙
|
|
|
|
|
*/
|
|
|
|
|
* 升级到版本2。
|
|
|
|
|
* @param db 数据库对象
|
|
|
|
|
*/
|
|
|
|
|
private void upgradeToV2(SQLiteDatabase db) {
|
|
|
|
|
db.execSQL("DROP TABLE IF EXISTS " + TABLE.NOTE);
|
|
|
|
|
db.execSQL("DROP TABLE IF EXISTS " + TABLE.DATA);
|
|
|
|
@ -450,49 +395,68 @@ newVersion:新的数据库版本号。 */
|
|
|
|
|
createDataTable(db);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method upgradeToV3
|
|
|
|
|
* @description 升级数据库到版本 3。删除不再使用的触发器,为笔记表添加 gtask_id 列,并创建回收站系统文件夹。
|
|
|
|
|
* @date: 2024-12-21 22:55
|
|
|
|
|
* @author: 齐景熙
|
|
|
|
|
*/
|
|
|
|
|
* 升级到版本3。
|
|
|
|
|
* @param db 数据库对象
|
|
|
|
|
*/
|
|
|
|
|
private void upgradeToV3(SQLiteDatabase db) {
|
|
|
|
|
// 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_delete");
|
|
|
|
|
db.execSQL("DROP TRIGGER IF EXISTS update_note_modified_date_on_update");
|
|
|
|
|
// add a column for gtask id
|
|
|
|
|
db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.GTASK_ID
|
|
|
|
|
+ " TEXT NOT NULL DEFAULT ''");
|
|
|
|
|
// add a trash system folder
|
|
|
|
|
ContentValues values = new ContentValues();
|
|
|
|
|
values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER);
|
|
|
|
|
values.put(NoteColumns.ID, Notes.ID_TRASH_FOLDER);
|
|
|
|
|
values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM);
|
|
|
|
|
db.insert(TABLE.NOTE, null, values);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method upgradeToV4
|
|
|
|
|
* @description 升级数据库到版本 4。为笔记表添加 version 列。
|
|
|
|
|
* @date: 2024-12-21 22:57
|
|
|
|
|
* @author: 齐景熙
|
|
|
|
|
*/
|
|
|
|
|
* 升级到版本4。
|
|
|
|
|
* @param db 数据库对象
|
|
|
|
|
*/
|
|
|
|
|
private void upgradeToV4(SQLiteDatabase db) {
|
|
|
|
|
db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION
|
|
|
|
|
+ " INTEGER NOT NULL DEFAULT 0");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method upgradeToV5
|
|
|
|
|
* @description 升级数据库到版本 5。为笔记表添加 top 列。
|
|
|
|
|
* @date: 2024-12-21 23:00
|
|
|
|
|
* @author: 齐景熙
|
|
|
|
|
*/
|
|
|
|
|
* 升级到版本5。
|
|
|
|
|
* @param db 数据库对象
|
|
|
|
|
*/
|
|
|
|
|
private void upgradeToV5(SQLiteDatabase db) {
|
|
|
|
|
db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.TOP
|
|
|
|
|
+ " INTEGER NOT NULL DEFAULT 0");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 类注释
|
|
|
|
|
NotesDatabaseHelper 类用于管理便签应用的数据库。它继承自 SQLiteOpenHelper,提供了数据库的创建、升级和版本管理功能。
|
|
|
|
|
常量定义
|
|
|
|
|
DB_NAME:数据库文件名。
|
|
|
|
|
DB_VERSION:数据库版本。
|
|
|
|
|
TABLE:定义数据库表名的接口。
|
|
|
|
|
TAG:日志标签。
|
|
|
|
|
SQL 语句定义
|
|
|
|
|
CREATE_NOTE_TABLE_SQL:创建便签表的 SQL 语句。
|
|
|
|
|
CREATE_DATA_TABLE_SQL:创建数据表的 SQL 语句。
|
|
|
|
|
CREATE_DATA_NOTE_ID_INDEX_SQL:创建数据表的索引 SQL 语句。
|
|
|
|
|
NOTE_*_TRIGGER:便签表的触发器 SQL 语句。
|
|
|
|
|
DATA_*_TRIGGER:数据表的触发器 SQL 语句。
|
|
|
|
|
构造函数
|
|
|
|
|
NotesDatabaseHelper:构造函数,初始化数据库名称和版本。
|
|
|
|
|
创建表和触发器的方法
|
|
|
|
|
createNoteTable:创建便签表。
|
|
|
|
|
reCreateNoteTableTriggers:重新创建便签表的触发器。
|
|
|
|
|
createSystemFolder:创建系统文件夹。
|
|
|
|
|
createDataTable:创建数据表。
|
|
|
|
|
reCreateDataTableTriggers:重新创建数据表的触发器。
|
|
|
|
|
单例方法
|
|
|
|
|
getInstance:获取单例对象。
|
|
|
|
|
数据库创建和升级方法
|
|
|
|
|
onCreate:创建数据库时调用。
|
|
|
|
|
onUpgrade:数据库版本升级时调用。
|
|
|
|
|
upgradeToV2、upgradeToV3、upgradeToV4、upgradeToV5:具体的版本升级方法。
|
|
|
|
|
*/
|