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.

115 lines
5.8 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.

import android.content.ContentValues;
import android.content.Context;
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;
// 定义 NotesDatabaseHelper 类
public class NotesDatabaseHelper extends SQLiteOpenHelper {
// 定义 table 接口,分成 note 和 data在后面的程序里分别使用过
public interface TABLE {
public static final String NOTE = "note";
public static final String DATA = "data";
}
private static final String DB_NAME = "your_database_name";
private static final int DB_VERSION = 1;
// 数据库中需要存储的项目的名称,就相当于创建一个表格的表头的内容
private static final String CREATE_NOTE_TABLE_SQL =
"CREATE TABLE " + TABLE.NOTE + "(" +
NoteColumns.ID + " INTEGER PRIMARY KEY," +
NoteColumns.PARENT_ID + " INTEGER NOT NULL DEFAULT 0," +
// 这里省略原代码中 CREATE_NOTE_TABLE_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 + ");";
// 在文件夹中移入一个 Note 之后需要更改的数据的表格
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";
// 在文件夹中移出一个 Note 之后需要更改的数据的表格
private static final String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = "……";
// 在文件夹中插入一个 Note 之后需要更改的数据的表格
private static final String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER = "……";
// 在文件夹中删除一个 Note 之后需要更改的数据的表格
private static final String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER = "……";
// 在文件夹中对一个 Note 导入新的数据之后需要更改的数据的表格
private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER = "……";
// Note 数据被修改后需要更改的数据的表格
private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER = "……";
// Note 数据被删除后需要更改的数据的表格
private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER = "……";
// 删除已删除的便签的数据后需要更改的数据的表格
private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER = "……";
// 删除已删除的文件夹的便签后需要更改的数据的表格
private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER = "……";
// 还原垃圾桶中便签后需要更改的数据的表格
private static final String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER = "……";
// 构造函数,传入数据库的名称和版本
public NotesDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
// 创建表格(用来存储标签属性)
public void createNoteTable(SQLiteDatabase db) {
db.execSQL(CREATE_NOTE_TABLE_SQL);
reCreateNoteTableTriggers(db);
createSystemFolder(db);
Log.d(TAG, "note table has been created");
}
// execSQL 是数据库操作的 API主要是更改行为的 SQL 语句。
// 在这里主要是用来重新创建上述定义的表格用的,先删除原来有的数据库的触发器再重新创建新的数据库
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");
// 这里省略原代码中 reCreateNoteTableTriggers 里的省略部分
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);
}
// 创建系统文件夹
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_ROOT_FOLDER);
values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM);
db.insert(TABLE.NOTE, null, values);
// 这里省略原代码中 createSystemFolder 里的省略部分
}
// 创建表格(用来存储标签内容)
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");
}
// 实现上面创建的两个表格
@Override
public void onCreate(SQLiteDatabase db) {
createNoteTable(db);
createDataTable(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 这里可以添加数据库升级的逻辑
}
}