GreenDao使用

在Android的学习中,我们总是与数据库打交道,而使用系统的我们总得写sql语句等繁琐的步骤。自然的现在很多的数据库框架就出现了,像OrmLite、SugarORM、Active Android、Realm 与 GreenDAO。今天笔记下GreenDao的简单学习,GreenDao具有最大性能、易于使用API、最小内存消耗等优点(网上查的,没考证微笑);

一、GreenDao的相关资源

二、使用步骤

1、在app模块中在src/main目录下建立一个java等级的目录,名字叫java-gen。如下图所示。

2、在app/build.gradle中引入依赖  
sourceSets {
        main {
            java.srcDirs = ['src/main/java', 'src/main/java-gen']
        }
 }
compile 'org.greenrobot:greendao:3.2.0'
如下图所示。

3、新建一个Module,选择Java Library,完成后如下图所示。

4、在新建Module的build.gradle中引入依赖compile 'org.greenrobot:greendao-generator:3.2.0',如下图所示。
5、接下来在新建的Module编辑数据库。
public class ExampleDaoGenerator {
    public static void main(String[] args) throws Exception {
        // 两个参数分别代表:数据库版本号与自动生成代码的包路径。
        Schema schema = new Schema(1, "me.wuguicheng.dao");
        // 关联表,和表字段
        addNote(schema);
        // 自动生成代码,此处你需要根据自己的情况更改输出目录(既之前创建的 java-gen)。
        new DaoGenerator().generateAll(schema, "/Users/wuguicheng/Desktop/Develop/mystudy/day26_downloadmanager/DownloadManager/app/src/main/java-gen");
    }

    /**
     * @param schema
     */
    private static void addNote(Schema schema) {
        // 关联表名为[BOOK]
        Entity note = schema.addEntity("BOOK");
        //设置自动主键,或者note.addStringProperty("BOOK_NAME").primaryKey()指定主键;
        note.addIdProperty();
        note.addStringProperty("BOOK_NAME").notNull();
        // 与在 Java 中使用驼峰命名法不同,默认数据库中的命名是使用大写和下划线来分割单词的。
        // For example, a property called “creationDate” will become a database column “CREATION_DATE”.
        note.addStringProperty("COMMENT");
        note.addDateProperty("DATA");
    }
}
运行ExampleDaoGenerator的main方法,会在app模块自动生成代码。如下图所示。


6、接下来测试代码
Application初始化单例
public class BaseApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        DbUtils.getInstance().init(this);
    }
}
DbUtils工具类
public class DbUtils {
    private static DbUtils dbUtils;

    private SQLiteDatabase db;
    private BOOKDao bookDao;


    public void init(Context context){
        DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(context,"notes",null);
        db = devOpenHelper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(db);
        DaoSession daoSession = daoMaster.newSession();
        bookDao = daoSession.getBOOKDao();
    }

    public synchronized static DbUtils getInstance(){
        if(dbUtils==null){
            dbUtils = new DbUtils();
        }
        return dbUtils;
    }

    public SQLiteDatabase getDb(){
        return db;
    }

    public BOOKDao getBookDao(){
        return bookDao;
    }

    public Cursor getBookQueryCursorOrderByAsc(String columeName){
        if(db==null){
            throw new RuntimeException("DbUtils init method must be call");
        }
        String orderBy = columeName + " COLLATE LOCALIZED ASC";
        Cursor cursor = db.query(
                DbUtils.getInstance().getBookDao().getTablename(),
                DbUtils.getInstance().getBookDao().getAllColumns(),
                null,
                null,
                null,
                null,
                orderBy);
        return cursor;
    }

    public void insertBook(BOOK book){
        if(bookDao==null){
            throw new RuntimeException("DbUtils init method must be call");
        }
        bookDao.insert(book);
    }

    public List<BOOK> queryBook(String bookName){
        if(bookDao==null){
            throw new RuntimeException("DbUtils init method must be call");
        }
        Query<BOOK> query = bookDao.queryBuilder()
                .where(BOOKDao.Properties.BOOK_NAME.eq(bookName))
                .orderAsc(BOOKDao.Properties.DATA)
                .build();
        List<BOOK> list = query.list();
        return list;
    }

}


Activity中调用
public class GreendaoTestActivity extends ListActivity {
    private Cursor cursor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_greendao_test);

        showList();
    }

    private void showList(){
        String bookNameColumeName = BOOKDao.Properties.BOOK_NAME.columnName;
        cursor = DbUtils.getInstance().getBookQueryCursor(bookNameColumeName);
        String[] from = {bookNameColumeName,BOOKDao.Properties.COMMENT.columnName};
        int[] to = {android.R.id.text1, android.R.id.text2};
        SimpleCursorAdapter simpleAdapter = new SimpleCursorAdapter(
                this,android.R.layout.simple_list_item_2, cursor,from,to);
        setListAdapter(simpleAdapter);
    }

    /**
     * 添加一条记录
     * @param view
     */
    protected void btnAddItem(View view){
        EditText editText = (EditText) findViewById(R.id.edit);
        String editString = editText.getText().toString();
        DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
        String comment = "Added on " + df.format(new Date());
        if(TextUtils.isEmpty(editString)){
            Toast.makeText(this,"书名不能为空",Toast.LENGTH_SHORT).show();
        }else{
            BOOK book = new BOOK(null,editString,comment,new Date());
            DbUtils.getInstance().insertBook(book);
            L.i("insert new node id="+book.getId());
            cursor.requery();
        }
    }

    /**
     * 搜索某条记录
     * @param view
     */
    protected void btnSearch(View view){
        EditText editText = (EditText) findViewById(R.id.edit);
        String editString = editText.getText().toString();
        if(TextUtils.isEmpty(editString)){
            Toast.makeText(this,"书名不能为空",Toast.LENGTH_SHORT).show();
        }else{
            List<BOOK> books = DbUtils.getInstance().queryBook(editString);
            Toast.makeText(this,"查询到的结果有"+books.size()+"个",Toast.LENGTH_SHORT).show();
        }
    }
}
GreendaoTestActivity的布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:id="@+id/activity_greendao_test"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="cctvnews.wuguicheng.com.downloadmanager.GreendaoTestActivity">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/edit"
        />

    <Button
        android:text="添加一条数据"
        android:onClick="btnAddItem"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:text="搜索"
        android:onClick="btnSearch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ListView>
</LinearLayout>
7、运行效果如下








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值