GreenDao的使用
来源:互联网 发布:机器人c语言编程 编辑:程序博客网 时间:2024/06/05 22:43
参考博客地址
http://www.open-open.com/lib/view/open1438065400878.html
greendao官网
http://greenrobot.org/greendao/
1、GreenDao的原理
1、DaoMaster:
持有数据库对象(SQLiteDatabase) ,并管理一些DAO类(不是对象)
能够创建和删除数据库表
它的内部类OpenHelper和DevOpenHelper是SQLiteOpenHelper的实现类,用于创建SQLite数据库的模式
2、DaoSession:
管理制定模式下所有可用的DAO对象
能对实体进行插入、加载、更新、刷新、删除操作。
3、DAO:
Bean类
4、Entity
可持久化的对象,由generator 生成。相当于数据库中的一张表,所有字段都是使用标准的Java对象的属性
通过generator生成的这些工具类,你就可以在自己的Android工程中对进行数据库操作,完全不需要写任何SQL语句。
2、CRUD操作
创建数据库
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes", null);db = helper.getWritableDatabase();// 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession();
1、创建表和表中字段、
在使用greendao缓存机制的情况下,如果数据表的主键是数字类型的话,一定要使用long类型,不然不会报类型转换错误
Entity simple = schema.addEntity("SimpleEntity"); simple.addIdProperty(); simple.addBooleanProperty("simpleBoolean"); simple.addByteProperty("simpleByte"); simple.addShortProperty("simpleShort"); simple.addIntProperty("simpleInt"); simple.addLongProperty("simpleLong"); simple.addFloatProperty("simpleFloat"); simple.addDoubleProperty("simpleDouble"); simple.addStringProperty("simpleString"); simple.addByteArrayProperty("simpleByteArray");
2、查询
list() 所有实体载入内存,以ArrayList形式返回,使用最简单。
listLazy() 实体按需加载到内存。当列表中的其中一个元素第一次被访问,它会被加载并缓存备将来使用。使用完必须关闭。
listLazyUncached() 一个“虚拟”的实体列表:任何访问列表中的元素都会从数据库中读取。使用完必须关闭。
listIterator() 可迭代访问结果集,按需加载数据,数据不缓存。使用完必须关闭。
List joes = userDao.queryBuilder().where(Properties.FirstName.eq("Joe")).orderAsc(Properties.LastName).list();
3、更新
Note note = new Note(null, noteText, comment, new Date());noteDao.insert(note);
4、删除
getNoteDao().deleteByKey(id);//通过id删除//getNoteDao().deleteAll();删除所有 cursor.requery();
5、打开调试语句
QueryBuilder.LOG_SQL = true;QueryBuilder.LOG_VALUES = true;
3、GreenDao的简单使用
package com.example.administrator.myapplication;import android.app.ListActivity;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;import android.widget.SimpleCursorAdapter;import android.widget.Toast;import java.text.DateFormat;import java.util.Date;import java.util.List;import de.greenrobot.dao.query.QueryBuilder;import me.itangqi.greendao.DaoMaster;import me.itangqi.greendao.DaoSession;import me.itangqi.greendao.Note;import me.itangqi.greendao.NoteDao;public class MainActivity extends ListActivity implements View.OnClickListener { private EditText editText; private Cursor cursor; public static final String TAG = "DaoExample"; private Button btn_add; private Button btn_search; private SQLiteDatabase db; private DaoMaster daoMaster; private DaoSession daoSession; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_add = (Button) findViewById(R.id.buttonAdd); btn_search = (Button) findViewById(R.id.buttonSearch); editText = (EditText) findViewById(R.id.edittext); btn_add.setOnClickListener(this); btn_search.setOnClickListener(this); setupDatabase(); // 获取 NoteDao 对象 getNoteDao(); String textColumn = NoteDao.Properties.Text.columnName; String orderBy = textColumn + " COLLATE LOCALIZED ASC"; cursor = db.query(getNoteDao().getTablename(), getNoteDao().getAllColumns(), null, null, null, null, orderBy); String[] from = {textColumn, NoteDao.Properties.Comment.columnName}; int[] to = {android.R.id.text1, android.R.id.text2}; SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, cursor, from, to); setListAdapter(adapter); } private void setupDatabase() { // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。 // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。 // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。 // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。 DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes", null); db = helper.getWritableDatabase(); // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。 daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.buttonAdd: addNote(); break; case R.id.buttonSearch: search(); break; default: break; } } private void addNote() { String noteText = editText.getText().toString(); editText.setText(""); final DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM); String comment = "Added on " + df.format(new Date()); if (noteText == null || noteText.equals("")) { Toast.makeText(MainActivity.this, "不能添加为空", Toast.LENGTH_SHORT).show(); } else { // 插入操作,简单到只要你创建一个 Java 对象 Note note = new Note(null, noteText, comment, new Date()); getNoteDao().insert(note); Log.d(TAG, "Inserted new note, ID: " + note.getId()); cursor.requery(); } } private void search() { String noteText = editText.getText().toString(); editText.setText(""); if (noteText == null || noteText.equals("")) { Toast.makeText(MainActivity.this, "不能查询为空", Toast.LENGTH_SHORT).show(); } else { // Query 类代表了一个可以被重复执行的查询// Query query = getNoteDao().queryBuilder()// .where(NoteDao.Properties.Text.eq(noteText))// .orderAsc(NoteDao.Properties.Date)// .build(); // 查询结果以 List 返回 // List notes = query.list(); QueryBuilder<Note> query = getNoteDao().queryBuilder().where(NoteDao.Properties.Id.eq(noteText)); List<Note> notes = query.list(); Toast.makeText(MainActivity.this, "查询出" + notes.size() + "数据", Toast.LENGTH_SHORT).show(); } // 在 QueryBuilder 类中内置两个 Flag 用于方便输出执行的 SQL 语句与传递参数的值 QueryBuilder.LOG_SQL = true; QueryBuilder.LOG_VALUES = true; } @Override protected void onListItemClick(ListView l, View v, int position, long id) { // 删除操作,你可以通过「id」也可以一次性删除所有 getNoteDao().deleteByKey(id);// getNoteDao().deleteAll(); cursor.requery(); Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_SHORT).show(); } private NoteDao getNoteDao() { return daoSession.getNoteDao(); }}
- 关于greenDao的使用
- greenDao的使用教程
- GreenDAO的简单使用
- GreenDao的使用
- GreenDao的使用
- GreenDao的使用
- GreenDao的使用
- greendao的使用
- greenDAO的使用
- GreenDao的使用心得
- Greendao的使用
- GreenDao的使用详解
- GreenDao数据库的使用
- GreenDao的使用
- greenDAO的使用
- GreenDao的使用
- GreenDao的使用
- greenDAO的使用
- Java 内存相关
- php支付宝接口用法分析
- 用C语言实现 s=a+aa+aaa+aaaa+aaaaa. a是一个数字,例如 s = 2+22+222+2222+222,a的个数n由键盘输入
- Linux下进程内存空间组成/进程的内存映像
- POSTMAN中各种请求方式的区别
- GreenDao的使用
- surfaceflinger dump
- 获取某些视频,你懂得的
- 如何把一个整数转换成二进制
- 用函数来判断程序运行时间
- java开发编译器:C语言逻辑控制语句if else if 的语法解析
- Unity3D地形建模插件World Composer用法(大范围地形建模)
- 快乐彩蛋
- Android个人学习小结2016.10