android 数据库 多线程,【多线程数据库面试题】面试问题:Android… - 看准网

使用GreenDao已经好久了,不知不觉已经更新到3.x版本了。

记录一下使用基本方法:

1.先在app目录下的main文件夹下新建java-gen目录:

ac3359b3a3a658a4792c3279aff45add.png

注:一会的java文件指定生成在这个目录下, 当然这不是必须的,你可以自定义目录,这样做的目的是,目录结构清晰等这那的。

2.在app下build.gradle中指定识别java-gen,顺便倒入greendao依赖:

compile "org.greenrobot:greendao:3.2.2"

sourceSets {

main {

java.srcDirs = ['src/main/java', 'src/main/java-gen']

}

}3.新建java工程:

12757009db60108d31d3af691f48f4c0.png

然后在java工程中倒入依赖:

compile 'org.greenrobot:greendao-generator:3.2.2'

4.在java工程中新建一个java类:GreenDaoGenerator,其中我新建了一个表后运行这个java类,

greendao会根据我们的设置和表新建的字段,直接将需要的类生成到刚才我们指定的目录下:

package com.example;

import org.greenrobot.greendao.generator.DaoGenerator;

import org.greenrobot.greendao.generator.Entity;

import org.greenrobot.greendao.generator.Schema;

/**

* java工程生成数据库表

*/

public class GreenDaoGenerator {

public static void main(String[] args){

// 生成数据库实体类xxentity 对应的是数据库的表

Schema schema = new Schema(1, "com.school.entity");

addTestGroup(schema);

schema.setDefaultJavaPackageDao("com.school.dao");

try {

new DaoGenerator().generateAll(schema, "/Users/katsurayasubumi/StudioProjects/Reliable_TestInput/app/src/main/java-gen");

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 测试项目分组表

*/

private static void addTestGroup(Schema schema){

Entity entity = schema.addEntity("TestGroup");

entity.addIdProperty();

entity.addIntProperty("group");

entity.addStringProperty("name");

}

}注:1.其中entity.addIdProperty();是给这张表新建一个主键,自增长的id。你也可以换成你实际需求中的唯一标识的”id“。

2.main函数中Schema在实例化的时候,第一个参数为数据库版本号,第二个参数是生成对应表实体类的目录。下面setDefal..是指定greendao生成的类的目录。

0bd9b26abbf849e7a8e05c7a676bb843.png

上图就是运行java工程之后,对应目录下生成了对应的文件。

5.接下来再来封装一下数据库操作类。

public class DaoManager {

private static final String TAG = DaoManager.class.getSimpleName();

// 数据库名称

private static final String DB_NAME = "reliable.sqlite";

// 多线程访问

private volatile static DaoManager manager;

private static DaoMaster.DevOpenHelper helper;

private static DaoMaster daoMaster;

private static DaoSession daoSession;

private Context context;

/**

* 使用单例模式获得操作数据库的对象

*/

public static DaoManager getInstance(){

DaoManager instance = null;

if (manager == null){

synchronized (DaoManager.class){

if (instance == null){

instance = new DaoManager();

manager = instance;

}

}

}

return manager;

}

public void init(Context context){

this.context = context;

}

/**

* 判断是否存在数据库

* 如果没有则创建数据库

*/

public DaoMaster getDaoMaster(){

if (daoMaster == null){

// DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);

MyOpenHelper myOpenHelper = new MyOpenHelper(context, DB_NAME, null);

daoMaster = new DaoMaster(myOpenHelper.getWritableDatabase());

}

return daoMaster;

}

/**

* 完成对数据库的添加删除修改查询等的操作

* 注:仅仅是一个接口

*/

public DaoSession getDaoSession(){

if (daoSession == null){

if (daoMaster == null){

daoMaster = getDaoMaster();

}

daoSession = daoMaster.newSession();

}

return daoSession;

}

/**

* 打开输出日志的操作

* 注:默认是关闭的

*/

public void setDebug(){

QueryBuilder.LOG_SQL = true;

QueryBuilder.LOG_VALUES = true;

}

/**

* 关闭所有的操作

* 注:数据库开启之后,使用完毕必须要关闭

*/

public void closeConnection(){

closeHelper();

closeDaoSession();

}

public void closeHelper(){

if (helper != null){

helper.close();

helper = null;

}

}

public void closeDaoSession(){

if (daoSession != null){

daoSession.clear();

daoSession = null;

}

}

}

6.最后就是对表具体的操作了,下一篇来记录:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值