成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用鴻蒙HarmonyOS官方關系型數據庫API去讀取已存在的數據庫

數據庫 OpenHarmony
要寫的demo的大概邏輯,我會直接將一個事先已經存入一定數據的sqlite db文件放入demo文件夾中,然后使用Harmony Developer提供的關系型數據庫的相關API去讀取之前放入的sqlite文件的內容,然后展示出來

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

文章開始前先分享一個報錯:

錯誤: 類重復: com.harmony.onlineedict.ResourceTable

這個報錯發生的現場是:我把DEVECO升級到2.0Beta后,我打開了一個在升級之前的項目,在構建的時候就發生了這個報錯,一時讓人很迷茫。

迷茫中找到的解決方式是在Build中Clean Project,然后繼續構建就OK了。

正文開始:

申明一下:這個內容是學習了李寧老師課程的基礎上寫出來的,大家可以多多去和李寧老師學習哦,這個老師很硬核!

先把代碼放上來,https://gitee.com/forQinzhikai/harmony-osapplication.git

其中的RdbStoreExample文件夾為該demo完整實例代碼,大家有什么問題,歡迎留言交流

先說一下,要寫的demo的大概邏輯,我會直接將一個事先已經存入一定數據的sqlite db文件放入demo文件夾中,然后使用Harmony Developer提供的關系型數據庫的相關API去讀取之前放入的sqlite文件的內容,然后展示出來

最后的效果如下:


該demo中操作關系型數據庫的大概邏輯。

- 1.將拷貝過來的sqlite文件進行讀入應用中

- 2.然后用harmonyOS提供的API去處理讀入的數據并進行展示

1.將拷貝過來的sqlite文件夾讀入應用

1.1首先將一個已經存在的sqlite文件放入指定位置

指定位置為/src/main/resources/rawfile,對,必須得這兒,數據庫文件中的內容如下:

1.2 然后將讀取上一步操作中放入的sqlite文件,將其讀入本應用的所能識別的空間中(暫時先這么理解,反正只有這樣做,你才能讀取到)

具體的讀取過程,我創建了一個文件:readSqliteFile.java(見文章最后)

這份代碼中還涉及到了封裝打開數據庫和打開數據的操作,這一節只說一下讀取上一步拷貝文件的過程。

首先通過下面兩行,指定讀取的數據要存入的位置:dbPath。

  1. dirPath = new File(context.getDataDir().toString() + "/MainAbility/databases/db"); 
  2. dbPath = new File(Paths.get(dirPath.toString(),"PremierLeague.sqlite").toString());​ 

 然后通過下面一行打開剛才我們放入的sqlite文件:resource

  1. Resource resource = context.getResourceManager().getRawFileEntry("resources/rawfile/PremierLeague.sqlite").openRawFile();​ 

然后讀取resoruce寫入dbPath

  1. FileOutputStream fos = new FileOutputStream(dbPath); 
  2. byte[] buffer = new byte[4096]; 
  3. int count = 0; 
  4. while((count = resource.read(buffer)) >= 0){ 
  5. fos.write(buffer,0,count); 
  6. }​ 

 2.然后用harmonyOS提供的API去處理讀入的數據并進行展示

這一塊的代碼也在上一節展示的readSqliteFile.java文件中。在這里我們用到的是官方提供的數據管理模塊中關系型數據庫的API,鏈接:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/database-relational-overview-0000000000030046,這個API是RdbSotre系列。

2.1 配置RdbStore

定義一個RdbStore的全局變量

  1. private RdbStore store;​ 

定義需要的StoreConfig配置文件,可以看到配置文件中指定的數據庫的名字,這里是指的剛才寫入的dbPath中的。

  1. private StoreConfig config = StoreConfig.newDefaultConfig("PremierLeague.sqlite");​ 

定義配置需要的回調函數,這里我們還用不上,所以先用空的就行

  1. private static final RdbOpenCallback callback = new RdbOpenCallback() { 
  2.  
  3. @Override 
  4.  
  5. public void onCreate(RdbStore rdbStore) { 
  6.  
  7.  
  8. @Override 
  9.  
  10. public void onUpgrade(RdbStore rdbStore, int i, int i1) { 
  11.  
  12.  
  13. };​ 

 2.2 打開RdbStore

首先得new一個 DatabaseHelper

  1. DatabaseHelper helper = new DatabaseHelper(context);​ 

然后從new出的DatabaseHelper調用getRdbStore獲得RdbStore對象

  1. store = helper.getRdbStore(config,1,callback,null);​ 

2.3 從上一步打開的RdbStore中進行查詢

首先使用querySql傳入sql語句進行查詢

  1. ResultSet resultSet = store.querySql("select * from team",null);​ 

然后使用ResultSet類的goToNextRow()進行讀取

  1. while(resultSet.goToNextRow()){ 
  2.  
  3. sqliteData sqldata = new sqliteData(); 
  4.  
  5. sqldata.no = resultSet.getInt(0); 
  6.  
  7. sqldata.clubName = resultSet.getString(1); 
  8.  
  9. result.add(sqldata); 
  10.  
  11. }​ 

 3.然后就得到了數據庫文件想要的數據,這里將其存入了ArrayList,然后在需要的地方去遍歷它就可以嘍

下面附上readSqliteFile.java文件代碼,整個demo從文章開頭給出的gitee地址去下載就可以了!

  1. package com.harmony.rdbstoreexample; 
  2.  
  3. import ohos.app.AbilityContext; 
  4.  
  5. import ohos.data.DatabaseHelper; 
  6.  
  7. import ohos.data.rdb.RdbOpenCallback; 
  8.  
  9. import ohos.data.rdb.RdbStore; 
  10.  
  11. import ohos.data.rdb.StoreConfig; 
  12.  
  13. import ohos.data.resultset.ResultSet; 
  14.  
  15. import ohos.global.resource.Resource; 
  16.  
  17. import java.io.File; 
  18.  
  19. import java.io.FileOutputStream; 
  20.  
  21. import java.io.IOException; 
  22.  
  23. import java.nio.file.Paths; 
  24.  
  25. import java.util.ArrayList; 
  26.  
  27. public class readSqliteFile { 
  28.  
  29. private AbilityContext context; 
  30.  
  31. private File dirPath; 
  32.  
  33. private File dbPath; 
  34.  
  35. private RdbStore store; 
  36.  
  37. private StoreConfig config = StoreConfig.newDefaultConfig("PremierLeague.sqlite"); 
  38.  
  39. private static final RdbOpenCallback callback = new RdbOpenCallback() { 
  40.  
  41. @Override 
  42.  
  43. public void onCreate(RdbStore rdbStore) { 
  44.  
  45.  
  46. @Override 
  47.  
  48. public void onUpgrade(RdbStore rdbStore, int i, int i1) { 
  49.  
  50.  
  51. }; 
  52.  
  53. public readSqliteFile(AbilityContext context) 
  54.  
  55.  
  56. this.context = context; 
  57.  
  58. dirPath = new File(context.getDataDir().toString() + "/MainAbility/databases/db"); 
  59.  
  60. if(!dirPath.exists()){ 
  61.  
  62. dirPath.mkdirs(); 
  63.  
  64.  
  65. dbPath = new File(Paths.get(dirPath.toString(),"PremierLeague.sqlite").toString()); 
  66.  
  67.  
  68. private void extractDB() throws IOException{ 
  69.  
  70. Resource resource = context.getResourceManager().getRawFileEntry("resources/rawfile/PremierLeague.sqlite").openRawFile(); 
  71.  
  72. if(dbPath.exists()){ 
  73.  
  74. dbPath.delete(); 
  75.  
  76.  
  77. FileOutputStream fos = new FileOutputStream(dbPath); 
  78.  
  79. byte[] buffer = new byte[4096]; 
  80.  
  81. int count = 0; 
  82.  
  83. while((count = resource.read(buffer)) >= 0){ 
  84.  
  85. fos.write(buffer,0,count); 
  86.  
  87.  
  88. resource.close(); 
  89.  
  90. fos.close(); 
  91.  
  92.  
  93. public void init() throws IOException{ 
  94.  
  95. extractDB(); 
  96.  
  97. DatabaseHelper helper = new DatabaseHelper(context); 
  98.  
  99. store = helper.getRdbStore(config,1,callback,null); 
  100.  
  101.  
  102. public ArrayList search(){ 
  103.  
  104. ResultSet resultSet = store.querySql("select * from team",null); 
  105.  
  106. ArrayList result = new ArrayList(); 
  107.  
  108. while(resultSet.goToNextRow()){ 
  109.  
  110. sqliteData sqldata = new sqliteData(); 
  111.  
  112. sqldata.no = resultSet.getInt(0); 
  113.  
  114. sqldata.clubName = resultSet.getString(1); 
  115.  
  116. result.add(sqldata); 
  117.  
  118.  
  119. resultSet.close(); 
  120.  
  121. return result; 
  122.  
  123.  

 ©著作權歸作者和HarmonyOS技術社區共同所有,如需轉載,請注明出處,否則將追究法律責任

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-09-06 10:24:12

鴻蒙HarmonyOS應用

2021-07-28 14:40:57

鴻蒙HarmonyOS應用

2021-09-03 15:41:00

鴻蒙HarmonyOS應用

2018-07-18 09:16:39

關系型非關系型數據庫

2017-03-17 14:44:04

關系型數據庫原理

2010-12-10 10:17:21

關系型數據庫

2022-06-13 08:30:01

數據庫管理系統

2016-08-23 14:25:19

MySQL約束數據庫

2018-03-26 12:58:52

數據庫OracleMySQL

2013-06-28 11:28:21

Facebook數據庫大數據

2011-06-07 17:14:15

關系型數據庫壓縮技術

2013-04-26 16:18:29

大數據全球技術峰會

2021-01-26 13:31:48

數據庫關系型數據庫冗余

2023-05-20 08:11:55

2023-05-22 16:10:51

動態共享包數據庫

2022-07-27 08:32:01

數據庫MySQL

2022-12-27 08:38:45

關系型數據庫設計

2019-05-05 16:13:07

關系型數據庫OracleMySQL

2011-10-11 17:07:12

數據庫Internet文件數據庫

2023-03-30 09:27:43

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品视频在线免费观看 | 国产精品久久久久久久岛一牛影视 | 欧美成人h版在线观看 | 日韩最新网站 | 国产女人与拘做视频免费 | 国产一区二区三区视频免费观看 | 国产小视频在线 | 91看片网址 | 蜜臀网| 国产99久久久久 | 99久久免费精品国产男女高不卡 | 拍真实国产伦偷精品 | 四虎影| xxx视频| www.99久久.com | 日本黄色不卡视频 | 国产激情91久久精品导航 | 国产精品久久国产精品 | 波多野结衣在线观看一区二区三区 | 五月婷婷视频 | 久久不卡区| 美日韩免费视频 | 在线观看黄色大片 | 亚洲精品v日韩精品 | 国产美女视频黄 | 91精品综合久久久久久五月天 | 中日av | 国产精品永久免费 | 久久九 | 一区二区三区国产精品 | 神马久久av | 久久伊人青青草 | 天天爽网站 | 日韩在线欧美 | 在线观看亚洲 | av一区二区在线观看 | 日本在线视频一区二区 | 亚洲精品视频免费 | 久久久国产一区二区三区 | 欧美大片黄 | 国产激情视频在线免费观看 |