在./src/main目录下创建一个与java同层级的java-gen文件夹.
//buildTypes{}中配置
sourceSets {
main {
java.srcDirs = ['src/main/java', 'src/main/java-gen']
}
}
3.添加依赖
dependencies {
compile 'de.greenrobot:greendao:1.3.7'
}
4.为了操作简单 可直接引入JAVA项目greendao,在安卓项目中直接添加依赖,现附上greendao的java项目
资源链接 http://download.csdn.net/detail/qq_23363425/9618837
为了方便我将代码粘出来:备注(需要在java项目中添加依赖compile('de.greenrobot:DaoGenerator:1.3.0'))
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(5, "com.aaa.bean");
// 1: 数据库版本号
// com.xxx.bean:自动生成的Bean对象会放到/java-gen/com/xxx/bean中
schema.setDefaultJavaPackageDao("com.aaa.dao");
// DaoMaster.java、DaoSession.java、BeanDao.java会放到/java-gen/com/xxx/dao中
// 上面这两个文件夹路径都可以自定义,也可以不设置
initTable(schema); // 初始化Bean了
new DaoGenerator().generateAll(schema, "D:\\Dao\\app\\src\\main\\java-gen");// 自动创建
}
private static void initTable(Schema schema) {
Entity table = schema.addEntity("ContentEntity");// 表名
// table.setTableName("table"); // 可以对表重命名
//table.addLongProperty("id").primaryKey().index().autoincrement();
table.addIdProperty().autoincrement();// 主键,索引
table.addStringProperty("status");
table.addLongProperty("version");
table.addStringProperty("tableTypeId");
table.addStringProperty("storeId");
table.addStringProperty("name");
table.addStringProperty("orderby");
}
}
5.这就完成了添加,运行之后会生成相应的文件,并在控制台打印出相应的日志,搞定!
6、为了完善还可以封装添加操作db的工具类
BaseApplication
package com.wp.dao.daohelp;
import android.app.Application;
import android.content.Context;
import com.aaa.dao.DaoMaster;
import com.aaa.dao.DaoSession;
/**
* Created by wp on 2016/8/12.
*/
public class BaseApplication extends Application {
public static BaseApplication mInstance;
public static DaoMaster daoMaster;
public static DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
if (mInstance == null)
mInstance = this;
}
/**
* 取得DaoMaster
*
* @param context 上下文
* @return DaoMaster
*/
public static DaoMaster getDaoMaster(Context context) {
if (daoMaster == null) {
// DaoMaster.OpenHelper helper = new DaoMaster.DevOpenHelper(context,"myDb",null);
DaoMaster.OpenHelper helper = new TableOpenHelper(context, "myDb", null);
daoMaster = new DaoMaster(helper.getWritableDatabase());
}
return daoMaster;
}
/**
* 取得DaoSession
*
* @param context 上下文
* @return DaoSession
*/
public static DaoSession getDaoSession(Context context) {
if (daoSession == null) {
if (daoMaster == null) {
daoMaster = getDaoMaster(context);
}
daoSession = daoMaster.newSession();
}
return daoSession;
}
}
TableOpenHelper升级用
package com.wp.dao.daohelp;/*
package com.wp.dao.daohelp;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import com.aaa.dao.DaoMaster;
import com.aaa.dao.TableDao;
*/
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import com.aaa.dao.ContentEntityDao;
import com.aaa.dao.DaoMaster;
/**
* Created by wp on 2016/8/12.
*/
public class TableOpenHelper extends DaoMaster.OpenHelper {
public TableOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
super(context, name, factory);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion) {
case 1:
//创建新表,注意createTable()是静态方法
ContentEntityDao.createTable(db, true);
// 加入新字段
//db.execSQL("ALTER TABLE 'moments' ADD 'audio_path' TEXT;");
// TODO
break;
}
}
}
DbService操作数据库工具类
package com.wp.dao.daohelp;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import com.aaa.bean.AllData;
import com.aaa.bean.ContentEntity;
import com.aaa.dao.ContentEntityDao;
import com.aaa.dao.DaoSession;
import java.util.List;
import de.greenrobot.dao.query.QueryBuilder;
import de.greenrobot.dao.query.WhereCondition;
/**
* Created by wp on 2016/8/15.
*/
public class DbService {
private static final String TAG = DbService.class.getSimpleName();
private static DbService instance;
private static Context appContext;
private DaoSession mDaoSession;
private ContentEntityDao contentEntityDao;
private DbService() {
}
/**
* 采用单例模式
*
* @param context 上下文
* @return dbservice
*/
public static DbService getInstance(Context context) {
if (instance == null) {
instance = new DbService();
if (appContext == null) {
appContext = context.getApplicationContext();
}
instance.mDaoSession = BaseApplication.getDaoSession(context);
instance.contentEntityDao = instance.mDaoSession.getContentEntityDao();
}
return instance;
}
/**
* 根据用户id,取出用户信息
*
* @param id 用户id
* @return 用户信息
*/
public ContentEntity loadNote(Long id) {
if (!TextUtils.isEmpty(id + "")) {
return contentEntityDao.load(id);
}
return null;
}
/**
* 取出所有数据
*
* @return 所有数据信息
*/
public List loadAllNote() {
return contentEntityDao.loadAll();
}
/**
* 生成按id倒排序的列表
*
* @return 倒排数据
*/
public List loadAllNoteByOrder() {
return contentEntityDao.queryBuilder().orderDesc(ContentEntityDao.Properties.Id).list();
}
/**
* 根据查询条件,返回数据列表
*
* @param where 条件
* @param params 参数
* @return 数据列表
*/
public List queryNote(String where, String... params) {
return contentEntityDao.queryRaw(where, params);
}
/**
* 根据用户信息,插件或修改信息
*
* @param user 用户信息
* @return 插件或修改的用户id
*/
public long saveorReplace(ContentEntity user) {
return contentEntityDao.insertOrReplace(user);
}
public long saveNote(ContentEntity user) {
return contentEntityDao.insert(user);
}
/**
* 批量插入或修改用户信息
*
* @param list 用户信息列表
*/
public void saveNoteLists(final List list) {
if (list == null || list.isEmpty()) {
return;
}
contentEntityDao.getSession().runInTx(new Runnable() {
@Override
public void run() {
for (int i = 0; i < list.size(); i++) {
ContentEntity user = list.get(i);
//if (!instance.loadAllNote().equals(user.)){
contentEntityDao.insertOrReplace(user);
// }
}
}
});
}
/**
* 删除所有数据
*/
public void deleteAllNote() {
contentEntityDao.deleteAll();
}
/**
* 根据id,删除数据
*
* @param id 用户id
*/
public void deleteNote(long id) {
contentEntityDao.deleteByKey(id);
Log.i(TAG, "delete");
}
/**
* 根据用户类,删除信息
*
* @param user 用户信息类
*/
public void deleteNote(ContentEntity user) {
contentEntityDao.delete(user);
}
public List queryPerson(WhereCondition arg0, WhereCondition... conditions) {
QueryBuilder qb = contentEntityDao.queryBuilder();
qb.where(arg0, conditions);
List personList = qb.list();
return personList;
}
/**
* 检查数据库有没有重复数据 如果有 添加
*
* @param newList
* @return
*/
public void checkPersonExistAndUpdate(List newList) {
List oldList = instance.loadAllNote();//获取数据库中的所有数据
System.out.println(oldList.size() + "-------------数据库中的数据");
if (oldList.size() > 0) {
for (int i = 0; i < oldList.size(); i++) {
for (int j = 0; j < newList.size(); j++) {
if (oldList.get(i).getTableTypeId().equals(newList.get(j).getTableTypeId())) {//如果本地数据库包括这个tabletypeID
//判断status
if (Integer.parseInt(newList.get(j).getStatus()) == 2) {//服务器的此条数据状态为2,从本地删除此条数据
instance.deleteNote(oldList.get(i));
} else {//服务器的此条数据状态为1,不管跳出循环
return;
}
} else {
if (Integer.parseInt(newList.get(j).getStatus()) == 2) {//服务器的此条数据状态为2,从本地删除此条数据
return;
} else {//服务器的此条数据状态为1,不管跳出循环
//return;
instance.deleteNote(oldList.get(i));
}
//本地数据库不包括这个tabletypeid,添加到本地数据库
// instance.saveNote(newList.get(j));
}
}
}
} else {
//如果本地没有数据库,将从网络获取的数据添加到数据库
for (int j = 0; j < newList.size(); j++) {
if (Integer.parseInt(newList.get(j).getStatus()) == 2) {
newList.remove(newList.get(j));
}
}
instance.saveNoteLists(newList);
System.out.println("已将服务器获取的数据添加到本地数据库" + oldList.size());
}
}
}
http://download.csdn.net/download/qq_23363425/9618892 完整项目地址在这里,如有不正,欢迎指出