美文网首页
任务5-2:为NoteDAO类添加数据操作方法

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

作者: jingz课程 | 来源:发表于2018-04-02 23:59 被阅读0次

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

    • 新建笔记对象
    • 获取全部笔记对象
    • 根据笔记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;
        }
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/ykyfhftx.html