简介:GreenDao是一个用于操作Sqlite数据库的开源ORM框架,可以很方便的对数据库进行对象映射,增删改查等操作。优点是效率方面在类似框架中是最高的
使用步骤:
1、从github上将项目下载下来,导入开发工具。下载地址:https://github.com/greenrobot/greenDAO
2、其中有两个java项目,这两个java项目是用于生成bean文件和DaoMaster、DaoSession文件的,在示例文件中添加指定的bean,设置属性后运行java项目。此处注意,该项目运行java项目时,需要导入freemarker-xxx.jar,下载地址:http://freemarker.org/freemarkerdownload.html; 指定生成的目录时要填写src-gen,该目录必须在android项目中创建好,否则会报错;要写android项目的包名及项目路径
3、生成完后,在android项目中刷新src-gen目录后找到生成的文件,在自定义application中,添加两个方法
/**
* 取得DaoMaster
*
* @param context
* @return
*/
public static DaoMaster getDaoMaster(Context context) {
if (daoMaster == null) {
OpenHelper helper = new DaoMaster.DevOpenHelper(context,
Constants.DB_NAME, null);
daoMaster = new DaoMaster(helper.getWritableDatabase());
}
return daoMaster;
}
/**
* 取得DaoSession
*
* @param context
* @return
*/
public static DaoSession getDaoSession(Context context) {
if (daoSession == null) {
if (daoMaster == null) {
daoMaster = getDaoMaster(context);
}
daoSession = daoMaster.newSession();
}
return daoSession;
}
4、然后创建数据库操作类
package com.example.android.dao;
import java.util.List;
import org.apache.http.client.methods.HttpUriRequest;
import com.example.android.Cookie;
import com.example.android.CookieDao;
import com.example.android.DaoSession;
import com.example.android.Note;
import com.example.android.NoteDao;
import com.example.android.app.MyApplication;
import com.example.android.utils.CommonUtils;
import com.example.android.utils.LogUtils;
import android.content.Context;
/**
* 测试数据库操作类,用于操作sqlite
*
* @author Ht
*
*/
public class MyCookieDao {
private static MyCookieDao mInstance;
private DaoSession mDaoSession;
private CookieDao cookieDao;
private MyCookieDao() {
}
public static MyCookieDao getInstance(Context context) {
if (mInstance == null) {
mInstance = new MyCookieDao();
mInstance.mDaoSession = MyApplication.getDaoSession(context);
mInstance.cookieDao = mInstance.mDaoSession.getCookieDao();
}
return mInstance;
}
/**
* 增加或修改某条数据
*
* @param note
*/
public void saveCookie(Cookie cookie) {
cookieDao.insertOrReplace(cookie);
}
/**
* 批量添加数据(开启线程)
*
* @param list
*/
public void saveCookieLists(final List<Cookie> list) {
if (list == null || list.isEmpty()) {
return;
}
cookieDao.getSession().runInTx(new Runnable() {
@Override
public void run() {
for (int i = 0; i < list.size(); i++) {
Cookie cookie = list.get(i);
// 查询要插入的数据是否已存在
Cookie cacheCookie = queryCookie("where KEY=?",
cookie.getKey());
// 没有有效期的Cookie无需存储
if (cookie.getExpires() != null) {
// 已存在的Cookie直接更新
if (cacheCookie != null) {
cookie.setId(cacheCookie.getId());
}
cookieDao.insertOrReplace(cookie);
}
}
}
});
}
/**
* 删除指定id的数据
*
* @param id
*/
public void deleteCookie(long id) {
cookieDao.deleteByKey(id);
}
/**
* 删除指定的数据
*
* @param note
*/
public void deleteCookie(Cookie cookie) {
cookieDao.delete(cookie);
}
/**
* 删除全部数据
*/
public void deleteAllCookie() {
cookieDao.getSession().runInTx(new Runnable() {
@Override
public void run() {
cookieDao.deleteAll();
}
});
}
/**
* 查找指定数据
*
* @param id
* @return
*/
public Cookie loadCookie(long id) {
return cookieDao.load(id);
}
/**
* 查找全部数据
*
* @return
*/
public List<Cookie> loadAllCookie() {
return cookieDao.loadAll();
}
/**
* 获取当前Cookie
*
* @return
*/
public String getCookiesHeader(String url) {
List<Cookie> cookies = loadAllCookie();
StringBuilder cookieStr = new StringBuilder();
for (int i = 0; i < cookies.size(); i++) {
// 验证Cookie的有效性
if (CommonUtils.checkCookie(url, cookies.get(i))) {
// 验证通过,拼接Cookie
if (i == cookies.size() - 1) {
cookieStr.append(cookies.get(i).getKey() + "="
+ cookies.get(i).getValue());
} else {
cookieStr.append(cookies.get(i).getKey() + "="
+ cookies.get(i).getValue() + ";");
}
} else {
// 验证不通过,删除无效Cookie
deleteCookie(cookies.get(i));
}
}
return cookieStr.toString();
}
/**
* 根据条件查找多条数据
*
* @param where
* @param params
* @return
*/
public List<Cookie> queryCookies(String where, String... params) {
return cookieDao.queryRaw(where, params);
}
/**
* 根据条件查找单条数据
*
* @param where
* @param params
* @return
*/
public Cookie queryCookie(String where, String... params) {
List<Cookie> queryRaw = cookieDao.queryRaw(where, params);
if (queryRaw != null && queryRaw.size() > 0)
return queryRaw.get(0);
return null;
}
}
总结:在使用时直接调用对应的方法即可,可根据需求自定义数据库操作类,非常方便和高效的使用方式