刚开始接触GreenDao数据库是都感觉挺麻烦,其实不然,用多了就会感觉到他的好处,其实挺简单的
//用GreenDao控件要到的依赖
project.gradle中
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
app.gradleapply plugin: 'org.greenrobot.greendao'
compile 'org.greenrobot:greendao:3.2.0'
//依赖导完后创建一个Bean类 类中的参数有几个什么类型 取决于你要在数据库中存储的字段和类型决定
比如我的: 存储三个String类型的字段 id相当于数据库中的自增id(注意:id不可重复,必须是Long类型) @Entity
运行 后会生成三个文件
public class UserBean {
@Id(autoincrement =true)
Long id;
private String publishedAt;
private String des;
private String type;
@Generated(hash = 1903720241)
public UserBean(Long id, String publishedAt, String des, String type) {
this.id = id;
this.publishedAt = publishedAt;
this.des = des;
this.type = type;
}
@Generated(hash = 1203313951)
public UserBean() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getPublishedAt() {
return this.publishedAt;
}
public void setPublishedAt(String publishedAt) {
this.publishedAt = publishedAt;
}
public String getDes() {
return this.des;
}
public void setDes(String des) {
this.des = des;
}
public String getType() {
return this.type;
}
public void setType(String type) {
this.type = type;
}
}
//此时在app.gradle中添加如下代码(gen文件会生成到指定路径下)
//创建一个对数据库操作的类import android.app.Application;
//存储时创建上面类的对象调用方法:具体如下
import android.content.Context;
import android.content.ContextWrapper;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import com.bwie.xiaomuweek01.gen.DaoMaster;
import com.bwie.xiaomuweek01.gen.DaoSession;
import com.facebook.drawee.backends.pipeline.Fresco;
import java.io.File;
import java.io.IOException;
/**
* Created by Administrator on 2017/12/2.
*/
public class GreenDaoHelper extends Application {
private GreenDaoHelper Instance;
private static DaoMaster daoMaster;
private static DaoSession daoSession;
public GreenDaoHelper getInstance() {
if (Instance == null) {
Instance = this;
}
return Instance;
}
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
/**
* 获取DaoMaster
*
* @param context
* @return
*/
public static DaoMaster getDaoMaster(Context context) {
if (daoMaster == null) {
try{
ContextWrapper wrapper = new ContextWrapper(context) {
/**
* 获得数据库路径,如果不存在,则创建对象对象
*
* @param name
*/
@Override
public File getDatabasePath(String name) {
// 判断是否存在sd卡
boolean sdExist = android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment.getExternalStorageState());
if (!sdExist) {// 如果不存在,
Log.e("SD卡管理:", "SD卡不存在,请加载SD卡");
return null;
} else {// 如果存在
// 获取sd卡路径
String dbDir = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
dbDir += "/Android";// 数据库所在目录
String dbPath = dbDir + "/" + name;// 数据库路径
// 判断目录是否存在,不存在则创建该目录
File dirFile = new File(dbDir);
if (!dirFile.exists())
dirFile.mkdirs();
// 数据库文件是否创建成功
boolean isFileCreateSuccess = false;
// 判断文件是否存在,不存在则创建该文件
File dbFile = new File(dbPath);
if (!dbFile.exists()) {
try {
isFileCreateSuccess = dbFile.createNewFile();// 创建文件
} catch (IOException e) {
e.printStackTrace();
}
} else
isFileCreateSuccess = true;
// 返回数据库文件对象
if (isFileCreateSuccess)
return dbFile;
else
return super.getDatabasePath(name);
}
}
/**
* 重载这个方法,是用来打开SD卡上的数据库的,android 2.3及以下会调用这个方法。
*
* @param name
* @param mode
* @param factory
*/
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory) {
return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);
}
/**
* Android 4.0会调用此方法获取数据库。
*
* @see android.content.ContextWrapper#openOrCreateDatabase(java.lang.String,
* int,
* android.database.sqlite.SQLiteDatabase.CursorFactory,
* android.database.DatabaseErrorHandler)
* @param name
* @param mode
* @param factory
* @param errorHandler
*/
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {
return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);
}
};
DaoMaster.OpenHelper helper = new DaoMaster.DevOpenHelper(wrapper,"test.db",null);
daoMaster = new DaoMaster(helper.getWritableDatabase()); //获取未加密的数据库
}catch (Exception e){
e.printStackTrace();
}
}
return daoMaster;
}
/**
* 获取DaoSession对象
*
* @param context
* @return
*/
public static DaoSession getDaoSession(Context context) {
if (daoSession == null) {
if (daoMaster == null) {
getDaoMaster(context);
}
daoSession = daoMaster.newSession();
}
return daoSession;
}
}private DaoSession session= GreenDaoHelper.getDaoSession(getActivity());
//调用添加方法----以一个对象将数据添加到数据库( System.currentTimeMillis() --> 代表不可出现重复 )
UserBean userBean=new UserBean(System.currentTimeMillis(),r.getPublishedAt(),r.getDesc(),r.getType()); session.insert(userBean);