国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Android數據庫操作(下)

hizengzeng / 1303人閱讀

摘要:一前言拖了這么久才能寫下篇,主要是最近在忙著復習算法和操作系統的知識馬上要工作了,還是要要多鍛煉一下內功,好,話不多說,先貼出上篇數據庫操作上上次代碼寫到類,這個類的構造函數接受的參數是一個,還記得是什么吧其實也類似于中的迭代模式。

一 前言

拖了這么久才能寫下篇,主要是最近在忙著復習算法和操作系統的知識(馬上要工作了,還是要要多鍛煉一下內功),好,話不多說,先貼出上篇Android數據庫操作(上)上次代碼寫到CursorWrapper類,這個類的構造函數接受的參數是一個Cursor,還記得Cursor是什么吧?其實也類似于java中的迭代模式。這里我把所有完成的代碼都傳到github上了,包含我前面幾篇文章的所有代碼,基本上是一個可以用的記錄筆記的小軟件。大家可以對照著學習。代碼在這里

二 讀取數據

1.使用CursorWrapper
創建一個類如下:

public class NoteCursorWrapper extends CursorWrapper {
    public NoteCursorWrapper(Cursor cursor){
        super(cursor);
    }

}

我們把Cursor傳給它的構造函數,然后調用一下父類的構造方法。想了解細節的同學可以去看一下CursorWrapper的源碼。下面重點來了,看代碼:

public class NoteCursorWrapper extends CursorWrapper {
    public NoteCursorWrapper(Cursor cursor){
        super(cursor);
    }

     public Note getNote(){
         String uuidString = getString(getColumnIndex(NoteDbScheme.NoteTable.Cols.UUID));
         String title = getString(getColumnIndex(NoteDbScheme.NoteTable.Cols.TITLE));
         String content = getString(getColumnIndex(NoteDbScheme.NoteTable.Cols.CONTENT));
         String tag = getString(getColumnIndex(NoteDbScheme.NoteTable.Cols.TAG));
         long date = getLong(getColumnIndex(NoteDbScheme.NoteTable.Cols.DATE));
         
         Note note = new Note(UUID.fromString(uuidString));
         note.setTitle(title);
         note.setContent(content);
         note.setTag(tag);
         note.setDate(new Date(date));
         
         return note;
     }
}

代碼看著是不是很清爽,先用getString或者getLong方法從數據庫中取出對應的值,然后再組裝成Note型返回。為什么寫得這么簡單?因為我們把Cursor傳遞給CursorWrapper構造方法了,它為我們做了很多額外工作。
2.修改getNode方法
準備工作都差不多做好了,現在我們修改之前的getNode方法,查出給定uuid的記錄:

    public Note getNote(UUID uuid){
//        for (Note note : notes){
//            if (note.getUuid().equals(uuid)){
//                return note;
//            }
//        }

//        return null;

        NoteCursorWrapper cursorWrapper =  queryNote(NoteDbScheme.NoteTable.Cols.UUID+"=?",new String[]{uuid.toString()});
        
        try {
            if (cursorWrapper.getCount() == 0){
                return null;
            }
            
            cursorWrapper.moveToFirst();
            return cursorWrapper.getNote();
        }finally {
            cursorWrapper.close();
        }
        
        
    }

注意queryNote中參數的寫法等同于sql語句中的where,細節在于那個問號,這是防止sql注入的好習慣。第二個需要注意的地方就是要記得執行 cursorWrapper.close方法。

3.修改getNotes方法
除了查出給定uuid的字段,通常我們還需要查出數據庫里存在的所有的記錄,所有的方法和上面的類似,把條件設置成null就好了。好看代碼:

    public ArrayList getNotes() {
//        return notes;
        ArrayList nodes = new ArrayList<>();
        NoteCursorWrapper wrapper = queryNote(null,null);
        try{
            wrapper.moveToFirst();
            while (!wrapper.isAfterLast()){
                nodes.add(wrapper.getNote());
                wrapper.moveToFirst();

            }
        }finally {
            wrapper.close();
        }
        return nodes;
    }

結合上面一段代碼,我們應該能體會到CursorWrapper類是怎么用的,去復習一下java的迭代模式也很容易理解。 這里給出完整的代碼:

public class NoteLab {
    private static NoteLab sNoteLab; //for the global use
//    private ArrayList notes;
    private Context context;
    private SQLiteDatabase database;

    private NoteLab(Context c){
//        notes = new ArrayList();
        this.context = c;
        database =  new NoteBaseHelper(context).getWritableDatabase();


        //generate 100 Note Objects
//        for (int i=0;i<100;i++){
//            Note note = new Note();
//            note.setTitle("this is title "+i);
//            note.setContent("this is content "+i+"balabalabalabalalabalabalabalabalala
balabalabalabalalabalabalabalabalala
balabalabalabalalabalabalabalabalala
balabalabalabalalabalabalabalabalala
balabalabalabalalabalabalabalabalala
");
//            notes.add(note);
//        }
    }

    public static NoteLab getNoteLab(Context context){
        if (sNoteLab == null){
            sNoteLab = new NoteLab(context);
        }

        return sNoteLab;
    }

    public ArrayList getNotes() {
//        return notes;
        ArrayList notes = new ArrayList();
        NoteCursorWrapper wrapper = queryNote(null,null);
        try{
            wrapper.moveToFirst();
            while (!wrapper.isAfterLast()){
                notes.add(wrapper.getNote());
                wrapper.moveToNext();
            }
        }finally {
            wrapper.close();
        }

        return notes;
    }

    public void addNote(Note note){
//        notes.add(note);
        ContentValues values = getValues(note);
        database.insert(NoteDbScheme.NoteTable.name,null,values);
    }

    public Note getNote(UUID uuid){
//        for (Note note : notes){
//            if (note.getUuid().equals(uuid)){
//                return note;
//            }
//        }

//        return null;

        NoteCursorWrapper cursorWrapper =  queryNote(NoteDbScheme.NoteTable.Cols.UUID+"=?",new String[]{uuid.toString()});

        try {
            if (cursorWrapper.getCount() == 0){
                return null;
            }

            cursorWrapper.moveToFirst();
            return cursorWrapper.getNote();
        }finally {
            cursorWrapper.close();
        }


    }

    private ContentValues getValues(Note note){
        ContentValues values = new ContentValues();
        values.put(NoteDbScheme.NoteTable.Cols.UUID,note.getUuid().toString());
        values.put(NoteDbScheme.NoteTable.Cols.TITLE,note.getTitle());
        values.put(NoteDbScheme.NoteTable.Cols.CONTENT,note.getContent());
        values.put(NoteDbScheme.NoteTable.Cols.DATE,note.getDate().toString());
        values.put(NoteDbScheme.NoteTable.Cols.TAG,note.getTag());
        return values;
    }



    private NoteCursorWrapper queryNote(String whereClause, String[] whereArgs){
        Cursor cursor = database.query(
                NoteDbScheme.NoteTable.name,
                null,
                whereClause,
                whereArgs,
                null,
                null,
                null
        );
        return new NoteCursorWrapper(cursor);
    }
}

好了,代碼寫到這里差不多了,一個簡單的記筆記的軟件就完成啦。要想豐富好Note的功能,大家可以去了解一下Android下面的富文本編輯器以及Android網絡操作。你可以把本地儲存的筆記數據同步到服務器上。:)

三 后記

如果你完全讀了下面這些文章:
RecyclerView簡介與實例
ViewPager的使用
Android數據庫操作(上)
我相信你肯定想看到完整的代碼,幸運的是,這幾篇文章是貫穿于一個筆記應用的,讀起來很方便。來,別猶豫啦,看完記得給我一個星星哦

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65615.html

相關文章

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<