@ -14,7 +14,7 @@
* limitations under the License .
* /
package net.micode.notes.data ; //定义包名
package net.micode.notes.data ;
import android.content.ContentValues ;
import android.content.Context ;
@ -26,216 +26,199 @@ import net.micode.notes.data.Notes.DataColumns;
import net.micode.notes.data.Notes.DataConstants ;
import net.micode.notes.data.Notes.NoteColumns ;
//库帮助类, 继承自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 static final String NOTE = "note" ; //笔记表名
public static final String NOTE = "note" ;
public static final String DATA = "data" ; //数据表名
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," + //笔记id, 主键
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," + //背景颜色id
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," + //同步id
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" + //版本号
")" ;
//创建数据表的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" +
")" ;
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 ''" +
")" ;
//创建数据表中note_id索引的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 ''" +
")" ;
private static final String CREATE_DATA_NOTE_ID_INDEX_SQL =
"CREATE INDEX IF NOT EXISTS note_id_index ON " +
TABLE . DATA + "(" + DataColumns . NOTE_ID + ");" ;
"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
* /
//当笔记被移动到文件夹时, 增加文件夹笔记数的触发器sql语句
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" ;
"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" ;
/ * *
* Decrease folder ' s note count when move note from folder
* /
//当笔记从文件夹中被删除时, 减少文件夹笔记数的触发器sql语句
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" ;
"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" ;
/ * *
* Increase folder ' s note count when insert new note to the folder
* /
//当新笔记被插入到文件夹中时, 增加文件夹笔记数的触发器sql语句
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" ;
"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" ;
/ * *
* Decrease folder ' s note count when delete note from the folder
* /
//当笔记从文件夹中被删除时, 减少文件夹笔记数的触发器sql语句
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" ;
"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" ;
/ * *
* Update note ' s content when insert data with type { @link DataConstants # NOTE }
* /
//当数据类型为NOTE时, 插入数据时更新笔记内容的触发器sql语句
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 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" ;
/ * *
* Update note ' s content when data with { @link DataConstants # NOTE } type has changed
* /
//当数据类型为NOTE时, 更新数据时更新笔记内容的触发器sql语句
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" ;
"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" ;
/ * *
* Update note ' s content when data with { @link DataConstants # NOTE } type has deleted
* /
//当数据类型为NOTE时, 删除数据时更新笔记内容的触发器sql语句
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" ;
"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" ;
/ * *
* Delete datas belong to note which has been deleted
* /
//当笔记被删除时, 删除与其相关的数据的触发器sql语句
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" ;
"CREATE TRIGGER delete_data_on_delete " +
" AFTER DELETE ON " + TABLE . NOTE +
" BEGIN" +
" DELETE FROM " + TABLE . DATA +
" WHERE " + DataColumns . NOTE_ID + "=old." + NoteColumns . ID + ";" +
" END" ;
/ * *
* Delete notes belong to folder which has been deleted
* /
//当文件夹被删除时, 删除与其相关的笔记的触发器sql语句
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" ;
"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" ;
/ * *
* Move notes belong to folder which has been moved to trash folder
* /
//当笔记被移动到回收站文件夹时, 移动与其相关的笔记到回收站文件夹的触发器sql语句
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" ;
//构造函数,初始化数据库名称和版本号
"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" ;
public NotesDatabaseHelper ( Context context ) {
super ( context , DB_NAME , null , DB_VERSION ) ;
}
//创建笔记表, 包括执行创建表的SQL语句和创建相应的触发器
public void createNoteTable ( SQLiteDatabase db ) {
db . execSQL ( CREATE_NOTE_TABLE_SQL ) ; //执行创建笔记表的SQL语句
reCreateNoteTableTriggers ( db ) ; //重新创建笔记表的触发器
createSystemFolder ( db ) ; //创建系统文件夹
Log . d ( TAG , "note table has been created" ) ; //日志输出
db . execSQL ( CREATE_NOTE_TABLE_SQL ) ;
reCreateNoteTableTriggers ( db ) ;
createSystemFolder ( db ) ;
Log . d ( TAG , "note table has been created" ) ;
}
//重新创建笔记表的触发器
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_delete" ) ;
db . execSQL ( "DROP TRIGGER IF EXISTS delete_data_on_delete" ) ;
@ -243,7 +226,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_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 ) ;
@ -252,7 +235,6 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
db . execSQL ( FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER ) ;
}
///创建系统文件夹
private void createSystemFolder ( SQLiteDatabase db ) {
ContentValues values = new ContentValues ( ) ;
@ -288,26 +270,23 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
db . insert ( TABLE . NOTE , null , values ) ;
}
//创建数据表方法, 包括执行创建表的SQL语句、创建相应的触发器和创建索引
public void createDataTable ( SQLiteDatabase db ) {
db . execSQL ( CREATE_DATA_TABLE_SQL ) ;
reCreateDataTableTriggers ( db ) ; //重新创建数据表的触发器
db . execSQL ( CREATE_DATA_NOTE_ID_INDEX_SQL ) ; //创建note_id索引
Log . d ( TAG , "data table has been created" ) ; //记录日志
reCreateDataTableTriggers ( db ) ;
db . execSQL ( CREATE_DATA_NOTE_ID_INDEX_SQL ) ;
Log . d ( TAG , "data table has been created" ) ;
}
//重新创建数据表的触发器
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_delete" ) ;
db . execSQL ( DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER ) ; //创建新的触发器
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 ) ;
}
//获取单例实例
static synchronized NotesDatabaseHelper getInstance ( Context context ) {
if ( mInstance = = null ) {
mInstance = new NotesDatabaseHelper ( context ) ;
@ -315,33 +294,30 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
return mInstance ;
}
//数据库第一次被创建时调用,用于初始化数据库结构
@Override
public void onCreate ( SQLiteDatabase db ) {
createNoteTable ( db ) ; //笔记表
createDataTable ( db ) ; //数据表创建
createNoteTable ( db ) ;
createDataTable ( db ) ;
}
//数据库升级时调用,根据版本号进行相应的升级操作
@Override
public void onUpgrade ( SQLiteDatabase db , int oldVersion , int newVersion ) {
boolean reCreateTriggers = false ; //标志是否需要重新创建触发器
boolean skipV2 = false ; //标志是否跳过v2版本的升级
boolean reCreateTriggers = false ;
boolean skipV2 = false ;
//根据不用的版本号进行升级操作
if ( oldVersion = = 1 ) {
upgradeToV2 ( db ) ;
skipV2 = true ; // this upgrade including the upgrade from v2 to v3
oldVersion + + ;
}
if ( oldVersion = = 2 & & ! skipV2 ) { //从v2升级到v3
if ( oldVersion = = 2 & & ! skipV2 ) {
upgradeToV3 ( db ) ;
reCreateTriggers = true ; //标志需要重新创建触发器
reCreateTriggers = true ;
oldVersion + + ;
}
if ( oldVersion = = 3 ) { //从v3升级到v4
if ( oldVersion = = 3 ) {
upgradeToV4 ( db ) ;
oldVersion + + ;
}
@ -351,7 +327,6 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
reCreateDataTableTriggers ( db ) ;
}
//如果版本号没有升级成功,抛出异常
if ( oldVersion ! = newVersion ) {
throw new IllegalStateException ( "Upgrade notes database to version " + newVersion
+ "fails" ) ;