国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

wordpress機(jī)械行業(yè)模板外貿(mào)推廣優(yōu)化公司

wordpress機(jī)械行業(yè)模板,外貿(mào)推廣優(yōu)化公司,1號(hào)網(wǎng)站建設(shè),手工制作帽子 小學(xué)生需求 使用GreenDao數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)的存儲(chǔ)。 介紹 GreenDao 是一個(gè)輕量級(jí)的對(duì)象關(guān)系映射(ORM)庫(kù),用于簡(jiǎn)化 Android 應(yīng)用中的數(shù)據(jù)庫(kù)操作。它提供了以下主要功能: 簡(jiǎn)化數(shù)據(jù)庫(kù)操作:通過(guò)注解定義實(shí)體類(lèi),Green…
需求

使用GreenDao數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)的存儲(chǔ)。

介紹

GreenDao 是一個(gè)輕量級(jí)的對(duì)象關(guān)系映射(ORM)庫(kù),用于簡(jiǎn)化 Android 應(yīng)用中的數(shù)據(jù)庫(kù)操作。它提供了以下主要功能:

簡(jiǎn)化數(shù)據(jù)庫(kù)操作:通過(guò)注解定義實(shí)體類(lèi),GreenDao 自動(dòng)生成 DAO(數(shù)據(jù)訪問(wèn)對(duì)象)類(lèi),簡(jiǎn)化了數(shù)據(jù)庫(kù)的增、刪、改、查操作。

高性能:GreenDao 設(shè)計(jì)目標(biāo)之一是高效地執(zhí)行數(shù)據(jù)庫(kù)操作,尤其在處理大量數(shù)據(jù)時(shí)表現(xiàn)出色。

自動(dòng)生成代碼:通過(guò)編譯時(shí)生成代碼,減少了手動(dòng)編寫(xiě) SQL 和數(shù)據(jù)處理邏輯的需要。

事務(wù)支持:支持?jǐn)?shù)據(jù)庫(kù)事務(wù),確保數(shù)據(jù)操作的原子性和一致性。

靈活性:可以通過(guò)自定義查詢和批量操作,滿足復(fù)雜的數(shù)據(jù)處理需求。

小巧:庫(kù)體積小,適合需要輕量級(jí) ORM 的應(yīng)用。

集成

在 build.gradle 文件中添加 GreenDao 依賴:

implementation 'org.greenrobot:greendao:3.3.0'

配置 build.gradle 以生成 DAO 類(lèi)。添加插件和配置:

apply plugin: 'org.greenrobot.greendao'greendao {schemaVersion 1 //定義數(shù)據(jù)庫(kù)的版本號(hào),用于處理數(shù)據(jù)庫(kù)升級(jí)。daoPackage 'com.example.dao' //指定生成的 DAO 類(lèi)包名。targetGenDir 'src/main/java' //指定生成的實(shí)體類(lèi)包名。
}
使用

創(chuàng)建實(shí)體類(lèi):
使用 GreenDao 提供的注解定義實(shí)體類(lèi)。舉例:

@Entity
public class UpdateBean{@Id(autoincrement = true)private Long id;private String name;// getters and setters
}

創(chuàng)建實(shí)體類(lèi)之后,使用Build重新構(gòu)建一下項(xiàng)目,然后會(huì)自動(dòng)生成相關(guān)文件
【DaoMaster】【DaoSession】【UpdateBeanDao】

創(chuàng)建一個(gè)幫助類(lèi) 【UpdateOpenHelper】

public class UpdateOpenHelper extends DaoMaster.OpenHelper {public UpdateOpenHelper(Context context, String name) {super(context, name);}public UpdateOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {super(context, name, factory);}@Overridepublic void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {DaoMaster.dropAllTables(wrap(db), true);}@Overridepublic void onUpgrade(Database db, int oldVersion, int newVersion) {super.onUpgrade(db, oldVersion, newVersion);}
}

創(chuàng)建一個(gè)管理類(lèi)【UpdateManager 】

public class UpdateManager {private Context mContext;private static UpdateManager manager = new UpdateManager();private static ConcurrentHashMap<String, DaoMaster> masterMap = new ConcurrentHashMap<>();private static ConcurrentHashMap<String, DaoSession> daoSessionMap = new ConcurrentHashMap<>();private static ConcurrentHashMap<String, UpdateOpenHelper> helperMap = new ConcurrentHashMap<>();public static UpdateManager getInstance() {return manager;}public void init(Context context) {this.mContext = context;}private DaoMaster getDaoMaster(String dbName) {if (!masterMap.containsKey(dbName)) {UpdateOpenHelper openHelper = helperMap.get(dbName);if (openHelper == null) {UGDaoContext daoContext = new UGDaoContext(mContext);openHelper = new UpdateOpenHelper(daoContext, dbName, null);helperMap.put(dbName, openHelper);}DaoMaster master;try {master = new DaoMaster(openHelper.getWritableDatabase());masterMap.put(dbName, master);} catch (Exception e) {e.printStackTrace();}}return masterMap.get(dbName);}public DaoSession getDaoSession(String dbName) {if (!daoSessionMap.containsKey(dbName)) {DaoMaster master = getDaoMaster(dbName);if (master != null) {DaoSession session = master.newSession();daoSessionMap.put(dbName, session);}}return daoSessionMap.get(dbName);}/*** 關(guān)閉指定數(shù)據(jù)庫(kù)連接** @param dbName 數(shù)據(jù)庫(kù)名字*/public void closeConnection(String dbName) {DaoSession session = daoSessionMap.get(dbName);if (session != null) {session.clear();daoSessionMap.remove(dbName);}DaoMaster master = masterMap.get(dbName);if (master != null) {master = null;masterMap.remove(dbName);}UpdateOpenHelper helper = helperMap.get(dbName);if (helper != null) {helper.close();helperMap.remove(dbName);}}/*** 關(guān)閉所有數(shù)據(jù)庫(kù)連接*/public void closeAllConnection() {// 關(guān)閉所有DaoSessionssynchronized (this) {for (String dbName : daoSessionMap.keySet()) {closeConnection(dbName); // 關(guān)閉每一個(gè)連接}// 額外步驟:清理所有映射daoSessionMap.clear();masterMap.clear();helperMap.clear();}}}

還有需要修改數(shù)據(jù)庫(kù)的文件的存儲(chǔ)路徑,GreenDao數(shù)據(jù)庫(kù)默認(rèn)的存儲(chǔ)路徑是在應(yīng)用內(nèi)部私有存儲(chǔ),所以如果刪除了應(yīng)用之后,數(shù)據(jù)文件也會(huì)被刪除,同時(shí)也不利于外部查找數(shù)據(jù)庫(kù)文件。

創(chuàng)建【UGDaoContext】修改數(shù)據(jù)庫(kù)文件地址

public class UGDaoContext extends ContextWrapper {public UGDaoContext(Context base) {super(base);}@Overridepublic File getDatabasePath(String name) {String dbDir;boolean isExistSDCar = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);if (isExistSDCar) {dbDir = Environment.getExternalStorageDirectory().getAbsolutePath();} else {dbDir = Environment.getDataDirectory().getAbsolutePath();}String dbDirPath = dbDir + File.separator + "app_dao" + File.separator + "data_update";Log.d("TAG", "數(shù)據(jù)庫(kù)的文件夾地址:" + dbDirPath);File dbDirFile = new File(dbDirPath);if (!dbDirFile.exists()) {dbDirFile.mkdirs();}String dbNamePath = dbDirPath + File.separator + name;File dbNameFile = new File(dbNamePath);boolean isSuccess = false;if (!dbNameFile.exists()) {try {isSuccess = dbNameFile.createNewFile();} catch (IOException e) {e.printStackTrace();}} else {isSuccess = true;}if (isSuccess) {Log.d("TAG", "數(shù)據(jù)庫(kù)的文件地址:" + dbNamePath);return dbNameFile;} else {return super.getDatabasePath(name);}}@Overridepublic SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory) {return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);}@Overridepublic SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);}
}

接下里再創(chuàng)建一個(gè)工具類(lèi)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作【UpdateDaoUtil】

public class UpdateDaoUtil {private UpdateManager manager;public UpdateDaoUtil(Context context) {manager = UpdateManager.getInstance();manager.init(context);}/*** 完成UpdateBean記錄的插入*/public synchronized boolean insertUpdate(UpdateBean updateBean, String dbName) {boolean flag = false;if (manager.getDaoSession(dbName).getUpdateBeanDao().insert(updateBean) != -1) {flag = true;}return flag;}/*** 完成UpdateBean記錄的插入*/public synchronized boolean insertUpdate(UpdateBean updateBean) {boolean flag = false;if (manager.getDaoSession(getCurrentDBName()).getUpdateBeanDao().insert(updateBean) != -1) {flag = true;}return flag;}/*** 完成UpdateBean列表記錄的插入*/public synchronized boolean insertUpdate(List<UpdateBean> list) {int frequency = 0;UpdateBeanDao dao = manager.getDaoSession(getCurrentDBName()).getUpdateBeanDao();for (UpdateBean updateBean : list) {if (dao.insert(updateBean) == -1) {frequency++;}}return frequency == 0;}/*** 刪除單條記錄*/public synchronized boolean deleteUpdateBean(UpdateBean updateBean, String dbName) {boolean flag = false;try {manager.getDaoSession(dbName).delete(updateBean);flag = true;} catch (Exception e) {e.printStackTrace();}return flag;}/*** 刪除單條記錄*/public synchronized boolean deleteUpdateBean(UpdateBean updateBean) {boolean flag = false;try {manager.getDaoSession(getCurrentDBName()).delete(updateBean);flag = true;} catch (Exception e) {e.printStackTrace();}return flag;}/*** 刪除所有記錄*/public synchronized boolean deleteAll(String dbname) {boolean flag = false;try {manager.getDaoSession(dbname).deleteAll(UpdateBean.class);flag = true;} catch (Exception e) {e.printStackTrace();}return flag;}/*** 刪除所有記錄*/public synchronized boolean deleteAll() {boolean flag = false;try {manager.getDaoSession(getCurrentDBName()).deleteAll(UpdateBean.class);flag = true;} catch (Exception e) {e.printStackTrace();}return flag;}/*** 查詢數(shù)據(jù)庫(kù)前 number 條數(shù)據(jù)*/public synchronized List<UpdateBean> queryDataNumber(int number, String dbname) {QueryBuilder<UpdateBean> queryBuilder = manager.getDaoSession(dbname).queryBuilder(UpdateBean.class);return queryBuilder.limit(number).list();}/*** 查詢數(shù)據(jù)庫(kù)前 number 條數(shù)據(jù)*/public synchronized List<UpdateBean> queryDataNumber(int number) {QueryBuilder<UpdateBean> queryBuilder = manager.getDaoSession(getCurrentDBName()).queryBuilder(UpdateBean.class);return queryBuilder.limit(number).list();}/*** 刪除數(shù)據(jù)庫(kù)前 number 條數(shù)據(jù)*/public synchronized void deleteDataNumber(int number, String dbname) {UpdateBeanDao dao = manager.getDaoSession(dbname).getUpdateBeanDao();List<UpdateBean> lists = dao.queryBuilder().limit(number).list();dao.deleteInTx(lists);}/*** 刪除數(shù)據(jù)庫(kù)前 number 條數(shù)據(jù)*/public synchronized void deleteDataNumber(int number) {UpdateBeanDao dao = manager.getDaoSession(getCurrentDBName()).getUpdateBeanDao();List<UpdateBean> lists = dao.queryBuilder().limit(number).list();dao.deleteInTx(lists);}/*** 查詢所有記錄*/public synchronized List<UpdateBean> queryAll(String dbName) {return manager.getDaoSession(dbName).loadAll(UpdateBean.class);}/*** 查詢所有記錄*/public synchronized List<UpdateBean> queryAll() {return manager.getDaoSession(getCurrentDBName()).loadAll(UpdateBean.class);}/*** 使用指定名稱的數(shù)據(jù)庫(kù),每次查詢200條未上傳的數(shù)據(jù)** @param dbname 數(shù)據(jù)庫(kù)表名稱*/public synchronized List<UpdateBean> queryListUpdate(String dbname) {QueryBuilder<UpdateBean> queryBuilder = manager.getDaoSession(dbname).queryBuilder(UpdateBean.class);return queryBuilder.where(UpdateBeanDao.Properties.IsUpdate.eq(0)).limit(200).list();}/*** 更新是否上傳狀態(tài)** @param list 上傳數(shù)據(jù)的ID的list*/public synchronized void updateStatus(List<Long> list) {DaoSession daoSession = manager.getDaoSession(getCurrentDBName());UpdateBeanDao updateBeanDao = daoSession.getUpdateBeanDao();try {daoSession.runInTx(() -> {for (Long id : list) {UpdateBean bean = updateBeanDao.load(id);if (bean != null) {bean.setIsUpdate(1);updateBeanDao.update(bean);}}});} catch (Exception e) {e.printStackTrace();}}/*** 更新是否上傳狀態(tài)** @param dbName 數(shù)據(jù)庫(kù)表名字* @param list   上傳數(shù)據(jù)的ID的list*/public synchronized void updateStatus(String dbName, List<Long> list) {DaoSession daoSession = manager.getDaoSession(dbName);UpdateBeanDao updateBeanDao = daoSession.getUpdateBeanDao();try {daoSession.runInTx(() -> {for (Long id : list) {UpdateBean bean = updateBeanDao.load(id);if (bean != null) {bean.setIsUpdate(1);updateBeanDao.update(bean);}}});} catch (Exception e) {e.printStackTrace();}}/*** 使用queryBuilder進(jìn)行查詢未上傳的數(shù)據(jù)*/public synchronized List<UpdateBean> queryItemByQueryBuilder(int isUpdate) {QueryBuilder<UpdateBean> queryBuilder = manager.getDaoSession(getCurrentDBName()).queryBuilder(UpdateBean.class);return queryBuilder.where(UpdateBeanDao.Properties.IsUpdate.eq(isUpdate)).limit(100).list();}/*** 關(guān)閉當(dāng)前日期資源*/public synchronized void close() {manager.closeConnection(getCurrentDBName());}/*** 關(guān)閉特定名字的數(shù)據(jù)資源*/public synchronized void close(String dbName) {manager.closeConnection(dbName);}/*** 關(guān)閉所有連接*/public synchronized void closeAll() {manager.closeAllConnection();}/*** 數(shù)據(jù)表的名稱是當(dāng)天的日期** @return 當(dāng)天日期*/private static String getCurrentDateFormatted() {long currentTimeMillis = System.currentTimeMillis();Date date = new Date(currentTimeMillis);SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.getDefault());return sdf.format(date);}/*** 獲取當(dāng)天數(shù)據(jù)庫(kù)表的名稱*/private static String getCurrentDBName() {return getCurrentDateFormatted() + "_db";}/*** 組裝數(shù)據(jù)庫(kù)名字** @param dateTime 日期時(shí)間 例如 20240814*/public static String setDBName(String dateTime) {return dateTime + "_db";}
}

這樣基本上一個(gè)數(shù)據(jù)庫(kù)就創(chuàng)建了,剩下就是如何使用了。

UpdateDaoUtil updateDaoUtil;
updateDaoUtil = new UpdateDaoUtil(this);
   if (updateDaoUtil != null) {Log.i("TAG", "將List數(shù)據(jù)存入本地?cái)?shù)據(jù)庫(kù),存入條數(shù) " + updateBeanList.size());List<UpdateBean> list = new ArrayList<>(updateBeanList);boolean update = updateDaoUtil.insertUpdate(list);if (update) {Log.i("TAG", "數(shù)據(jù)存入數(shù)據(jù)庫(kù)正常");}}

記得銷(xiāo)毀

    @Overrideprotected void onDestroy() {super.onDestroy();if (updateDaoUtil != null) {updateDaoUtil.closeAll();}}

GreenDao數(shù)據(jù)庫(kù)的基本使用方式就是這樣了。

http://aloenet.com.cn/news/38692.html

相關(guān)文章:

  • 深圳 做網(wǎng)站 互聯(lián)杭州網(wǎng)站優(yōu)化
  • 建湖做網(wǎng)站的海外市場(chǎng)推廣做什么的
  • 網(wǎng)站開(kāi)發(fā)代理事件營(yíng)銷(xiāo)
  • 北京學(xué)生做兼職的網(wǎng)站泰州網(wǎng)站排名seo
  • 怎么去推廣一個(gè)網(wǎng)站網(wǎng)頁(yè)優(yōu)化方案
  • 赤坎網(wǎng)站制作收錄網(wǎng)站的平臺(tái)有哪些
  • 用地方別名做網(wǎng)站名線上推廣費(fèi)用
  • 蘇州自助建站太原網(wǎng)站關(guān)鍵詞排名
  • 學(xué)校網(wǎng)站建設(shè)成功案例運(yùn)營(yíng)培訓(xùn)
  • 織夢(mèng)網(wǎng)站系統(tǒng)刪除不了百度推廣總部電話
  • webapp 做視頻網(wǎng)站工具seo
  • 做網(wǎng)站時(shí)圖片的分辨率是多少淘寶店鋪推廣
  • 什么是營(yíng)銷(xiāo)策劃湖南seo排名
  • 安徽六安天氣預(yù)報(bào)google搜索引擎優(yōu)化
  • 網(wǎng)站建設(shè)委托外包協(xié)議驚艷的網(wǎng)站設(shè)計(jì)
  • 北京小程序開(kāi)發(fā)多少錢(qián)seo崗位培訓(xùn)
  • 中小企業(yè)網(wǎng)站建設(shè) 網(wǎng)絡(luò)營(yíng)銷(xiāo)企業(yè)網(wǎng)站建設(shè)報(bào)價(jià)表
  • 玉林市住房和城鄉(xiāng)建設(shè)局網(wǎng)站關(guān)于進(jìn)一步優(yōu)化落實(shí)疫情防控措施
  • php做網(wǎng)站真的有前途嗎個(gè)人發(fā)布信息的免費(fèi)平臺(tái)
  • 網(wǎng)站建設(shè) 證書(shū)網(wǎng)站推廣軟件哪個(gè)好
  • 網(wǎng)站負(fù)責(zé)人 法人可以下載新聞視頻的網(wǎng)站
  • 網(wǎng)站開(kāi)發(fā)使用哪種工具好網(wǎng)推技巧
  • 企業(yè)信用信息公示系統(tǒng)福建谷歌優(yōu)化技巧
  • 網(wǎng)站建設(shè)的基本內(nèi)容免費(fèi)直鏈平臺(tái)
  • 仙桃網(wǎng)站設(shè)計(jì)網(wǎng)絡(luò)推廣的工作好做嗎
  • 有的網(wǎng)站打開(kāi)的是html結(jié)尾的路徑有的不是互聯(lián)網(wǎng)運(yùn)營(yíng)推廣公司
  • 廣州中小企業(yè)網(wǎng)站制作seo網(wǎng)站推廣實(shí)例
  • 電子商務(wù)網(wǎng)站管理內(nèi)容競(jìng)價(jià)托管推廣公司
  • 網(wǎng)站建設(shè)數(shù)據(jù)庫(kù)系統(tǒng)什么都不懂能去干運(yùn)營(yíng)嗎
  • 汕頭建設(shè)局網(wǎng)站國(guó)家新聞最新消息今天