在AndoridStudio中引入GreenDAO

http://greendao-orm.com/ 官网 

GreenDAO整个运行的逻辑是通过配置其提供的JavaSE代码,自动在一个文件夹下生成需要Bean、DAO、DaoMaster、DaoSession;然后在Android代码中通过自动生成的DaoSession来操作数据库,具体方法如下:

到GitHub上下载示例工程:

https://github.com/SureCase/GreenDaoForAndroidStudio
这个Demo工程也不用怎么仔细的去看,下载解压之后Copy里面的MyDaoGenerator文件夹,把这个文件夹拷贝到你的工程跟目录中,就是与app文件夹同层级的目录里。

1、打开settings.gradle,修改内容

include 'MyDaoGenerator','app'

2、打开MyDaoGenerator工程中的MyDaoGenerator.java
package com.example;

import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Schema;

public class MyDaoGenerator {

public static void main(String[] args) throws Exception {
Schema schema =
new Schema(1, "com.test.movie.mobile"); // 1: 数据库版本号 // com.xxx.bean:自动生成的Bean对象会放到/java-gen/com/xxx/bean中
      schema.setDefaultJavaPackageDao("com.test.movie.dao");
    // DaoMaster.java、DaoSession.java、BeanDao.java会放到/java-gen/com/xxx/dao中
        schema.enableKeepSectionsByDefault();

addSearchHistory(schema);
new DaoGenerator().generateAll(schema, args[0]);
}

private static void addSearchHistory(Schema schema){
Entity subscriptionItem = schema.addEntity("SearchHistory");//表名
subscriptionItem.addLongProperty("id").primaryKey().autoincrement();//主键,自动增长
subscriptionItem.addStringProperty("keyword");
}
 }

这里只需要关注一个问题,就是如果数据库要升级,这里是修改代码后全量重新创建。

假设要给SearchHistory表增加一个”age”属性,并且增加School表的做法是:

  1. 把数据库版本号修改为2

  2. addSearchHistory方法中加入subscriptionItem.addStringProperty("age");

  3. 新建addScholl方法


3、打开MyDaoGenerator的build.gradle文件,配置outputDir,路径就是存放自动生成DaoMaster和其他代码的地方
def outputDir = "../app/src/main/java"

gradle.build文件中的内容:
apply plugin: 'application'
apply plugin: 'java'

mainClassName = 'com.example.MyDaoGenerator'

def outputDir = "../app/src/main/java"

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'de.greenrobot:greendao-generator:1.3.1'
}

task createDocs {
def docs = file(outputDir)
docs.mkdirs()
}

run {
args outputDir
}

4、在项目的
build.gradle文件中添加:


dependencies {
    compile 'de.greenrobot:greendao:2.0.0'
}

5、在studio的右边 找到 Gradle -->GreenDaoForAndroidStudio--> MyDaoGenerator-->run 生成需要Bean、DAO、DaoMaster、DaoSession

6、在Android工程中初始化数据库

public class GreenDaoHelper {

private static GreenDaoHelper instance;
private DaoSession daoSession;

public GreenDaoHelper(Context context) {
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "movie-db", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
}

public static synchronized GreenDaoHelper getInstance(Context ctx) {
if (instance == null)
instance = new GreenDaoHelper(ctx.getApplicationContext());
return instance;
}

public SearchHistoryDao getSearchHistoryDao(){
return daoSession.getSearchHistoryDao();
}
}
初始化代码示例:
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "movie-db", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();

  
  
这里我封装的DaoMaster.OpenHelper,之所以要做一层封装是因为默认的DaoMaster.OpenHelper在碰到数据库升级的时候会删除旧的表来创建新的表,这样就会导致旧表的数据全部丢失了,所以一定要封装DaoMaster.OpenHelper来实现数据库升级,示例代码如下:
public static abstract class OpenHelper extends SQLiteOpenHelper {

public OpenHelper(Context context, String name, CursorFactory factory) {
super(context, name, factory, SCHEMA_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
createAllTables(db, false);
}
}

/** WARNING: Drops all table on Upgrade! Use only during development. */
public static class DevOpenHelper extends OpenHelper {
public DevOpenHelper(Context context, String name, CursorFactory factory) {
super(context, name, factory);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
dropAllTables(db, true);
onCreate(db);
}
}
7、调用数据库
GreenDaoHelper mDownloadDao = GreenDaoHelper.getInstance(c).getDownloadDao();
//1、得到 state 不等于 1 
List<Download> downloadInfoList = mDownloadDao.queryBuilder().where(DownloadDao.Properties.State.notEq("1")).list();
//2、删除所有的记录
GreenDaoHelper.getInstance(mContext).getSearchHistoryDao().deleteAll();
//3、通过Id降序排序
SearchHistoryDao searchHistoryDao = GreenDaoHelper.getInstance(mContext).getSearchHistoryDao();
searchHistoryDao.queryBuilder().orderDesc(SearchHistoryDao.Properties.Id).list();
//4、插入 history 为 SearchHistory 的对象
GreenDaoHelper.getInstance(context).getSearchHistoryDao().insert(history);
//5、根据主键删除
GreenDaoHelper.getInstance(context).getSearchHistoryDao().deleteByKey(id);
//6、得到条数
GreenDaoHelper.getInstance(context).getSearchHistoryDao().queryBuilder().where(HistoryDao.Properties.Id.eq(id)).count();
//7、查下表内所有数据
GreenDaoHelper.getInstance(context).getSearchHistoryDao().queryBuilder().list();
具体方法还有很多,可以根据public class SearchHistoryDao extends AbstractDao<SearchHistory, Long> { 提供的方法来操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值