目前阶段我们对笔记数据的操作包括:
- 新建笔记对象
- 获取全部笔记对象
- 根据笔记id获取对应笔记对象
因此,相对应的,可以对note表的添加以下3项操作:
- 插入一条笔记数据
- 查询全部笔记
- 根据给定的ID查询一条笔记
1. 插入一条笔记数据
定义并实现对应方法为:
/**
* 向数据库中插入一条笔记
* @param note 被添加到数据库的笔记对象
* @return 插入成功后更新note的id并将note对象返回;插入失败则返回null
*/
public Note insertNote(Note note) {
if (note == null) {
return note;
}
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COL_TITLE, note.getTitle());
values.put(COL_CONTENT, note.getContent());
values.put(COL_CREATE_TIME, note.getCreateTime());
long id = db.insert(TABLE_NOTE, null, values);
note.setId(id);
return note;
}
对我们编写好的代码进行单元测试。在androidTest目录中找到NoteDAOTest类。上一节我们已经在这个类中实现了对创建数据库操作的单元测试。继续添加单元测试函数如下:
@Test
public void testInsertNote() {
// 测试前将数据库清空以免干扰
clearDb();
Context context = InstrumentationRegistry.getTargetContext();
NoteDAO dao = NoteDAO.getInstance(context);
// 新建笔记对象并插入数据库
Note note = new Note(0, "test 1", "This is a test.", System.currentTimeMillis());
Note note1 = dao.insertNote(note);
// 检查插入是否成功
// 依据是插入操作成功后会得到大于0的id
assertTrue(note.getId() > 0);
}
// 将数据库清空
private void clearDb() {
Context context = InstrumentationRegistry.getTargetContext();
NoteDAO dao = NoteDAO.getInstance(context);
NoteDAO.NoteDbHelper dbHelper = dao.getDbHelper();
dbHelper.getWritableDatabase().delete(Constants.TABLE_NOTE, null, null);
}
运行用例:

2. 查询全部笔记
/**
* 获取全部笔记
* @return 全部笔记的列表。如果没有任何笔记,则返回的列表长度为0
*/
public List<Note> queryAllNotes() {
List<Note> notes = new ArrayList<>();
SQLiteDatabase db = dbHelper.getReadableDatabase();
String orderBy = COL_CREATE_TIME + " DESC";
Cursor cursor = db.query(TABLE_NOTE, null, null, null, null, null, orderBy);
if (cursor != null) {
try {
while (cursor.moveToNext()) {
long id = cursor.getLong(0);
String title = cursor.getString(1);
String content = cursor.getString(2);
long createTime = cursor.getLong(3);
Note note = new Note(id, title, content, createTime);
notes.add(note);
}
} finally {
cursor.close();
}
}
return notes;
}
3. 根据给定的ID查询一条笔记
定义对应方法为:
/**
* 根据id获取对应的笔记
* @param id 笔记id
* @return 如果存在id对应的笔记,则创建对象并返回,否则返回null
*/
public Note queryNoteById(long id) {
if (id <= 0) {
return null;
}
SQLiteDatabase db = dbHelper.getReadableDatabase();
String selection = COL_ID + "=" + id;
Cursor cursor = db.query(TABLE_NOTE, null, selection, null, null, null, null, null);
if (cursor != null) {
try {
if (cursor.moveToFirst()) {
String title = cursor.getString(1);
String content = cursor.getString(2);
long createTime = cursor.getLong(3);
Note note = new Note(id, title, content, createTime);
return note;
}
} finally {
cursor.close();
}
}
return null;
}
网友评论