Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 安卓中引入GreenDAO數據庫框架,包括封裝好的數據庫操作工具類

安卓中引入GreenDAO數據庫框架,包括封裝好的數據庫操作工具類

編輯:關於Android編程

1.配置工程

在./src/main目錄下創建一個與java同層級的java-gen文件夾.

2.在build.gradle中配置

//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項目

為了方便我將代碼粘出來:備注(需要在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(1, "greendao.bean");
        // 1: 數據庫版本號
        // com.xxx.bean:自動生成的Bean對象會放到/java-gen/com/xxx/bean中

        schema.setDefaultJavaPackageDao("greendao.dao");
        // DaoMaster.java、DaoSession.java、BeanDao.java會放到/java-gen/com/xxx/dao中

        // 上面這兩個文件夾路徑都可以自定義,也可以不設置
        
initTable(schema); // 初始化Bean了
try { new DaoGenerator().generateAll(schema, "D:\\src\\main\\java-gen");// 自動創建 } catch (Exception e) { e.printStackTrace(); } } 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()); } } }

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved