GreenDao+存储数据库

刚开始接触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);

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(GreenDao+存储数据库)