zoukankan      html  css  js  c++  java
  • Android GreenDao 使用教程

    上一篇 总结了grendao 环境搭建以及简单的增删查改,接下来将全面解析框架的使用,基于上篇的orm模型(Note)数据库讲解

    GreenDao的插入:

    插入的方式有很多:

    daoSession.getNoteDao().insert(note);

     //插入note 如果note指定主键与表中已经存在了,就会发生异常(android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: tb_note._id (code 1555))而插入不进去

     daoSession.insert(note); 同上
     daoSession.getNoteDao().insertOrReplace(note);
    当主键存在的时候会替换,所以能够很好的执行插入操作,推荐
     daoSession.insertOrReplace(note); 同上
    原生的sqlite

     String insertSql = String.format("insert into %s (%s,%s,%s) values('%s','%s','%s')",
            NoteDao.TABLENAME,
            NoteDao.Properties.Title.columnName,
            NoteDao.Properties.Content.columnName,
            NoteDao.Properties.CreateTime.columnName,
            note.getTitle(),
            note.getContent(),
            note.getCreateTime());
       daoSession.getDatabase().execSQL(insertSql);
    批量插入
     public void insertBatch(List<Note> notes){
        daoSession.getNoteDao().insertInTx(notes);
      }
    GreenDao的更新操作
    1:单条更新(唯一性条件是主键相同)
      public void update(Note note) throws Exception {
            daoSession.update(note);
          //  daoSession.getNoteDao().update(note);
       }
    2:批量更新 
     //批量更新
       public void updateBatch(List<Note> notes) throws Exception {
           daoSession.getNoteDao().updateInTx(notes);
       }
    3:原生sql:
     public void updateSql(String sql){
        //  daoSession.getDatabase().execSQL("update .....");
         daoSession.getDatabase().execSQL(sql);
      }
    GreenDao 的删除操作
    1:单条删除(唯一性是主见相同)
      public void delete(Note note) throws Exception {
          daoSession.delete(note);
         // daoSession.getNoteDao().delete(note);
       }

    2: 单条删除 指定主键删除

      public void delete(long id) {
           daoSession.getNoteDao().deleteByKey(id);
       }
    3:批量删除

     public void deleteBatch(List<Note> notes) {
         daoSession.getNoteDao().deleteInTx(notes);
      }
    4:批量按主键删除 

     // 批量按主键删除
       public void deleteBatchByKey(List<Long> pkIds) {
         daoSession.getNoteDao().deleteByKeyInTx(pkIds);
       }
    5:删除所有 
      public void deleteAll() throws Exception {
        daoSession.deleteAll(Note.class);
        //   daoSession.getNoteDao().deleteAll();
      }
    6:原始sqlite语句

     daoSession.getDatabase().execSQL(deletesql);
    GreenDao 查询操作 也是最复杂的
    1:单条查询

    //按主键查询  
    public Note query(long pk) throws Exception {  
       // daoSession.getNoteDao().load(pk);//按主见查询  
        //daoSession.getNoteDao().load(rowId);//按行号查询  
        return daoSession.load(Note.class, pk);  
    } 
    2: QueryBuilder 复合查询
    public List<Note> queryBuider() throws Exception {  
         //select from tb_note where Content like 'greendao'  
         return daoSession.getNoteDao().queryBuilder().where(NoteDao.Properties.Content.like("greendao")).build().list();  
     }  
    public long queryBuider2(long pk) throws Exception {  
         //select count(*) from tb_note where Content like 'greendao'  
         return daoSession.getNoteDao().queryBuilder().where(NoteDao.Properties.Content.like("greendao")).buildCount().count();  
     } 
    public void queryBuider3() throws Exception {  
           Cursor cursor = null;  
           try {  
               //CursorQuery 部分查询  
               CursorQuery greendao = daoSession.getNoteDao().queryBuilder().where(NoteDao.Properties.Content.like("greendao")).buildCursor();  
               cursor = greendao.query();  
               while (cursor.moveToNext()) {  
                   long id = cursor.getInt(0);  
                   String title = cursor.getString(1);  
                   String content = cursor.getString(2);  
                   String time = cursor.getString(cursor.getColumnIndex(NoteDao.Properties.CreateTime.columnName));  
               }  
           } finally {  
               if (cursor != null)  
                   cursor.close();  
           }  
       }  

    3:查询所有:

    public void queryAll()  
    {  
        daoSession.loadAll(Note.class);  
        daoSession.queryBuilder(Note.class).build().list();  
        daoSession.getNoteDao().queryBuilder().build().list();  
        daoSession.getNoteDao().loadAll();  
    }  
     
    
    
  • 相关阅读:
    网络对抗技术-实验四
    网络对抗技术-实验三
    安卓终端-Termux
    linux杂记
    使用pl/sql导入导出oracle
    systemctl 实现开机自启服务
    Java8 Collectors.toMap的坑
    idea使用lombok插件
    解决Lost connection to MySQL server during query错误方法
    java8之lamda
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/7503619.html
Copyright © 2011-2022 走看看