diff --git a/src/java/net/micode/notes/data/NotesDatabaseHelper.java b/src/java/net/micode/notes/data/NotesDatabaseHelper.java index 77ab2df..16dae0f 100644 --- a/src/java/net/micode/notes/data/NotesDatabaseHelper.java +++ b/src/java/net/micode/notes/data/NotesDatabaseHelper.java @@ -1,20 +1,17 @@ /* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * 版权所有 (c) 2010-2011, MiCode 开源社区 (www.micode.net) * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * 本文件授权使用 Apache License, Version 2.0(以下简称“许可证”); + * 除非符合许可证规定,否则不得使用此文件。 + * 您可以从以下网址获取许可证副本: * * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * 除非适用法律要求或书面同意,否则根据许可证分发的软件 + * 均按“原样”分发,不附带任何明示或暗示的保证或条件。 + * 有关许可权限和限制的具体语言,请参阅许可证。 */ - package net.micode.notes.data; import android.content.ContentValues; @@ -23,37 +20,44 @@ 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; - - -package net.micode.notes.data; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; -import android.util.Log; - /** * NotesDatabaseHelper 类用于管理便签应用的数据库。 * 它继承自 SQLiteOpenHelper,提供了数据库的创建、升级和版本管理功能。 + * 该类通过单例模式提供全局访问点,确保数据库操作的线程安全和资源高效利用。 */ public class NotesDatabaseHelper extends SQLiteOpenHelper { - private static final String DB_NAME = "note.db"; // 数据库文件名 - private static final int DB_VERSION = 5; // 数据库版本 + /** + * 数据库文件名。 + */ + private static final String DB_NAME = "note.db"; + /** + * 数据库版本号。 + */ + private static final int DB_VERSION = 5; /** * 定义数据库表名的接口。 */ 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 final String TAG = "NotesDatabaseHelper"; - private static NotesDatabaseHelper mInstance; // 单例对象 + /** + * 单例对象,用于全局访问数据库帮助器。 + */ + private static NotesDatabaseHelper mInstance; /** * 创建便签表的 SQL 语句。 @@ -106,132 +110,8 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { TABLE.DATA + "(" + DataColumns.NOTE_ID + ");"; /** - * 创建便签表的触发器,用于在更新便签的父文件夹ID时增加文件夹的便签计数。 - */ - 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"; - - /** - * 创建便签表的触发器,用于在更新便签的父文件夹ID时减少文件夹的便签计数。 - */ - 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"; - - /** - * 创建便签表的触发器,用于在插入便签时增加文件夹的便签计数。 - */ - 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"; - - /** - * 创建便签表的触发器,用于在删除便签时减少文件夹的便签计数。 - */ - 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"; - - /** - * 创建数据表的触发器,用于在插入数据时更新便签的内容。 - */ - 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"; - - /** - * 创建数据表的触发器,用于在更新数据时更新便签的内容。 - */ - 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"; - - /** - * 创建数据表的触发器,用于在删除数据时更新便签的内容。 - */ - 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"; - - /** - * 创建便签表的触发器,用于在删除便签时删除相关数据。 - */ - 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"; - - /** - * 创建便签表的触发器,用于在删除文件夹时删除相关便签。 - */ - 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"; - - /** - * 创建便签表的触发器,用于在移动文件夹到回收站时移动相关便签。 - */ - 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_FOLDER + - " BEGIN" + - " UPDATE " + TABLE.NOTE + - " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLDER + - " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + - " END"; - - /** - * 构造函数。 - * @param context 应用上下文 + * 构造函数,初始化数据库名称和版本。 + * @param context 应用上下文。 */ public NotesDatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); @@ -239,20 +119,21 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * 创建便签表。 - * @param db 数据库对象 + * @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"); + Log.d(TAG, "便签表已创建"); } /** * 重新创建便签表的触发器。 - * @param db 数据库对象 + * @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"); @@ -261,6 +142,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { 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); @@ -272,7 +154,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * 创建系统文件夹。 - * @param db 数据库对象 + * @param db 数据库对象。 */ private void createSystemFolder(SQLiteDatabase db) { ContentValues values = new ContentValues(); @@ -295,24 +177,26 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * 创建数据表。 - * @param db 数据库对象 + * @param db 数据库对象。 */ 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"); + Log.d(TAG, "数据表已创建"); } /** * 重新创建数据表的触发器。 - * @param db 数据库对象 + * @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"); 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); @@ -320,8 +204,8 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * 获取单例对象。 - * @param context 应用上下文 - * @return 单例对象 + * @param context 应用上下文。 + * @return 单例对象。 */ static synchronized NotesDatabaseHelper getInstance(Context context) { if (mInstance == null) { @@ -332,7 +216,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * 创建数据库时调用。 - * @param db 数据库对象 + * @param db 数据库对象。 */ @Override public void onCreate(SQLiteDatabase db) { @@ -342,9 +226,9 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { /** * 数据库版本升级时调用。 - * @param db 数据库对象 - * @param oldVersion 旧版本号 - * @param newVersion 新版本号 + * @param db 数据库对象。 + * @param oldVersion 旧版本号。 + * @param newVersion 新版本号。 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { @@ -431,32 +315,3 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { } } -/** - * 类注释 -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:具体的版本升级方法。 - */ \ No newline at end of file