您的位置:首页 > 移动开发 > Android开发

Android GreenDao 使用教程

2017-09-11 10:08 88 查看
上一篇 总结了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();
}




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: