任务5-2:为NoteDAO类添加数据操作方法

2018-04-02  本文已影响0人  jingz课程

目前阶段我们对笔记数据的操作包括:

因此,相对应的,可以对note表的添加以下3项操作:

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;
    }
上一篇下一篇

猜你喜欢

热点阅读