Android 初使用GreenDAO框架操作数据库

大家看这个之前最好先看看这位的,对greendao有详细的使用介绍
http://blog.csdn.net/risky78125/article/details/48738683

其实就是一个 小小的总结,好了,进入正题。
今天试着学习了一下greendao,实话说,两个字:方便。建表加上CRUD操作,几个小时上手,直接就能上项目。但是今天我遇到两个问题,确实是被原博主坑了(哈哈,开玩笑,自己太笨了):

对于初始化操作的封装,放在Application里面:

我首先建了一个笔记表,里面4个字段,id,title,comment,date;

对原博主代码一个小小的改进,相当于对其容易出错的地方的标示,因为我就是在这些地方跌倒的。

* @author QHT
 *
 */
public class SingleType extends Application {  

    private  static SingleType mInstance=null;  
    private  DaoMaster daoMaster;  
    private  DaoSession daoSession;  
    private NoteDao noteDao;
    /*下面构造方法一定要public,不然onCreate都进不去,直接报异常 并且MainActivity调用getInstance也会空指针*/
      public SingleType(){
      }
    @Override  
    public void onCreate() {  
        super.onCreate(); 
        //初始化,oncreate是Application刚进来第一个执行的方法
        if(mInstance == null)  
            mInstance = this;  
    }  
    //多线程下懒汉式单例实现,双重判断
    public static SingleType getInstance(){
        //高效率
     if(mInstance==null){
         //安全性
         synchronized (SingleType.class) {
             if(mInstance==null){
                mInstance=new SingleType();
             }
        }
     }
    return mInstance;
   }
    /** * 取得DaoMaster * * @param context * @return */  
    public  DaoMaster getDaoMaster(Context context) {  
        if (daoMaster == null) {  
            OpenHelper helper = new DaoMaster.DevOpenHelper(context,Constants.DB_NAME, null);  
            daoMaster = new DaoMaster(helper.getWritableDatabase());  
        }  
        return daoMaster;  
    }  

    /** * 取得DaoSession * * @param context * @return */  
    public  DaoSession getDaoSession(Context context) {  
        if (daoSession == null) {  
            if (daoMaster == null) {  
                daoMaster = getDaoMaster(context);  
            }  
            daoSession = daoMaster.newSession();  
        }  
        return daoSession;  
    } 
    public NoteDao getnoteDao(){
        if(noteDao==null){
  /**原博主代码为noteDao=daoSession.getNoteDao(); * daoSession这个对象会空啊,所以直接改为了getDaoSession(mInstance) * daoSession空了间接导致getInstance方法返回空。 **/
            noteDao=getDaoSession(mInstance).getNoteDao();
        }
        return noteDao;
    }
    public class Constants {
       public static final String DB_NAME = "note_db";  
 }
}  

主Activity
---------------

public class MainActivity extends ActionBarActivity {

    private SQLiteDatabase db;
    private DaoMaster daoMaster;
    private DaoSession daoSession;
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
       dodao();  
    }
    private void initView() {
        // TODO Auto-generated method stub
         tv=(TextView)findViewById(R.id.tv);
    }
    //数据库操作
    private void dodao() {
        // TODO Auto-generated method stub
        //上面的daoSession空了这儿的dao就空了!!! 很坑的!!!
        NoteDao dao = SingleType.getInstance().getnoteDao();
        List<Note> daoslist=new ArrayList<Note>();
        for(int i=0;i<=10;i++){
            Note note=new Note((long)i,"祁宏涛"+i,"666", "2016-03-31");
            daoslist.add(note);
            Log.d("tag",daoslist.get(i).getTitle()+daoslist.get(i).getDate());
        }
        dao.insertInTx(daoslist);   
        dao.deleteByKey(2l);
        dao.update(new Note(4l, "祁先生", "", "2016-04-01"));
        List<Note> querylist=dao.queryBuilder().list();
        for(Note note:querylist){
            tv.setText(note.getTitle());    
        }
    }
}

现在就差daomaster没碰见空了 - -!
如果大家看完原博客并实践后碰到了一些问题可以看我的博客,如果没问题,这篇文章直接就可以忽略。

你可能感兴趣的:(数据库,android,框架,greenDAO)