You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
git-test/net/micode/notes/data/NotesDatabaseHelper.java

135 lines
7.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.example.myapplication.data;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class NotesDatabaseHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "note.db";
private static final int DB_VERSION = 1;
// 定义表名常量(或者直接使用 NoteColumns.TABLE_NAME
private static final String TABLE_NOTE = NoteColumns.TABLE_NAME;
private static final String TABLE_DATA = NoteColumns.TABLE_DATA;
// 创建 notes 表
private static final String CREATE_NOTE_TABLE_SQL =
"CREATE TABLE " + TABLE_NOTE + " (" +
NoteColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
NoteColumns.COLUMN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0, " +
NoteColumns.COLUMN_ALERTED_DATE + " INTEGER NOT NULL DEFAULT 0, " +
NoteColumns.COLUMN_BG_COLOR_ID + " INTEGER NOT NULL DEFAULT 0, " +
NoteColumns.COLUMN_CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s', 'now')), " +
NoteColumns.COLUMN_HAS_ATTACHMENT + " INTEGER NOT NULL DEFAULT 0, " +
NoteColumns.COLUMN_MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s', 'now')), " +
NoteColumns.COLUMN_NOTES_COUNT + " INTEGER NOT NULL DEFAULT 0, " +
NoteColumns.COLUMN_SNIPPET + " TEXT NOT NULL DEFAULT '', " +
NoteColumns.COLUMN_TYPE + " INTEGER NOT NULL DEFAULT 0, " +
NoteColumns.COLUMN_WIDGET_ID + " INTEGER NOT NULL DEFAULT -1, " +
NoteColumns.COLUMN_WIDGET_TYPE + " INTEGER NOT NULL DEFAULT -1, " +
NoteColumns.COLUMN_SYNC_ID + " INTEGER NOT NULL DEFAULT 0, " +
NoteColumns.COLUMN_LOCAL_MODIFIED + " INTEGER NOT NULL DEFAULT 0, " +
NoteColumns.COLUMN_ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0, " +
NoteColumns.COLUMN_GTASK_ID + " TEXT NOT NULL DEFAULT '', " +
NoteColumns.COLUMN_VERSION + " INTEGER NOT NULL DEFAULT 0" +
")";
// 创建 data 表
private static final String CREATE_DATA_TABLE_SQL =
"CREATE TABLE " + TABLE_DATA + " (" +
NoteColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
DataColumns.MIME_TYPE + " TEXT NOT NULL, " +
DataColumns.NOTE_ID + " INTEGER NOT NULL DEFAULT 0, " +
NoteColumns.COLUMN_CREATED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s', 'now')), " +
NoteColumns.COLUMN_MODIFIED_DATE + " INTEGER NOT NULL DEFAULT (strftime('%s', 'now')), " +
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 + ")";
// 触发器1插入笔记时增加文件夹计数
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.COLUMN_NOTES_COUNT + " = " + NoteColumns.COLUMN_NOTES_COUNT + " + 1 " +
" WHERE " + NoteColumns._ID + " = new." + NoteColumns.COLUMN_PARENT_ID + "; " +
"END";
// 触发器2删除笔记时减少文件夹计数
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.COLUMN_NOTES_COUNT + " = " + NoteColumns.COLUMN_NOTES_COUNT + " - 1 " +
" WHERE " + NoteColumns._ID + " = old." + NoteColumns.COLUMN_PARENT_ID + " " +
" AND " + NoteColumns.COLUMN_NOTES_COUNT + " > 0; " +
"END";
// 触发器3插入 data 时更新笔记内容
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.COLUMN_SNIPPET + " = new." + DataColumns.CONTENT + " " +
" WHERE " + NoteColumns._ID + " = new." + DataColumns.NOTE_ID + "; " +
"END";
// 触发器4更新 data 时更新笔记内容
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.COLUMN_SNIPPET + " = new." + DataColumns.CONTENT + " " +
" WHERE " + NoteColumns._ID + " = new." + DataColumns.NOTE_ID + "; " +
"END";
public NotesDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_NOTE_TABLE_SQL);
db.execSQL(CREATE_DATA_TABLE_SQL);
db.execSQL(CREATE_DATA_NOTE_ID_INDEX_SQL);
// 创建触发器
db.execSQL(NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER);
db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER);
db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER);
db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 删除所有触发器
db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_insert");
db.execSQL("DROP TRIGGER IF EXISTS decrease_folder_count_on_delete");
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 TABLE IF EXISTS " + TABLE_NOTE);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_DATA);
// 重新创建
onCreate(db);
}
}