溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用關系型數據庫API去讀取已存在的數據庫

發(fā)布時間:2021-10-22 10:30:55 來源:億速云 閱讀:184 作者:iii 欄目:數據庫

這篇文章主要介紹“怎么用關系型數據庫API去讀取已存在的數據庫”,在日常操作中,相信很多人在怎么用關系型數據庫API去讀取已存在的數據庫問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用關系型數據庫API去讀取已存在的數據庫”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

效果如下:

怎么用關系型數據庫API去讀取已存在的數據庫

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

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

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

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

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

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

怎么用關系型數據庫API去讀取已存在的數據庫

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

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

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

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

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

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

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

然后讀取resoruce寫入dbPath

FileOutputStream fos = new FileOutputStream(dbPath); byte[] buffer = new byte[4096]; int count = 0; while((count = resource.read(buffer)) >= 0){ fos.write(buffer,0,count); }

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

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

2.1 配置RdbStore

定義一個RdbStore的全局變量

private RdbStore store;

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

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

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

private static final RdbOpenCallback callback = new RdbOpenCallback() {  @Override  public void onCreate(RdbStore rdbStore) {  }  @Override  public void onUpgrade(RdbStore rdbStore, int i, int i1) {  }  };

2.2 打開RdbStore

首先得new一個 DatabaseHelper

DatabaseHelper helper = new DatabaseHelper(context);

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

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

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

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

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

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

while(resultSet.goToNextRow()){  sqliteData sqldata = new sqliteData();  sqldata.no = resultSet.getInt(0);  sqldata.clubName = resultSet.getString(1);  result.add(sqldata);  }

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

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

package com.harmony.rdbstoreexample;  import ohos.app.AbilityContext;  import ohos.data.DatabaseHelper;  import ohos.data.rdb.RdbOpenCallback;  import ohos.data.rdb.RdbStore;  import ohos.data.rdb.StoreConfig;  import ohos.data.resultset.ResultSet;  import ohos.global.resource.Resource;  import java.io.File;  import java.io.FileOutputStream;  import java.io.IOException;  import java.nio.file.Paths;  import java.util.ArrayList;  public class readSqliteFile {  private AbilityContext context;  private File dirPath;  private File dbPath;  private RdbStore store;  private StoreConfig config = StoreConfig.newDefaultConfig("PremierLeague.sqlite");  private static final RdbOpenCallback callback = new RdbOpenCallback() {  @Override  public void onCreate(RdbStore rdbStore) {  }  @Override  public void onUpgrade(RdbStore rdbStore, int i, int i1) {  }  };  public readSqliteFile(AbilityContext context)  {  this.context = context;  dirPath = new File(context.getDataDir().toString() + "/MainAbility/databases/db");  if(!dirPath.exists()){  dirPath.mkdirs();  }  dbPath = new File(Paths.get(dirPath.toString(),"PremierLeague.sqlite").toString());  }  private void extractDB() throws IOException{  Resource resource = context.getResourceManager().getRawFileEntry("resources/rawfile/PremierLeague.sqlite").openRawFile();  if(dbPath.exists()){  dbPath.delete();  }  FileOutputStream fos = new FileOutputStream(dbPath);  byte[] buffer = new byte[4096];  int count = 0;  while((count = resource.read(buffer)) >= 0){  fos.write(buffer,0,count);  }  resource.close();  fos.close();  }  public void init() throws IOException{  extractDB();  DatabaseHelper helper = new DatabaseHelper(context);  store = helper.getRdbStore(config,1,callback,null);  }  public ArrayList search(){  ResultSet resultSet = store.querySql("select * from team",null);  ArrayList result = new ArrayList();  while(resultSet.goToNextRow()){  sqliteData sqldata = new sqliteData();  sqldata.no = resultSet.getInt(0);  sqldata.clubName = resultSet.getString(1);  result.add(sqldata);  }  resultSet.close();  return result;  }  }

到此,關于“怎么用關系型數據庫API去讀取已存在的數據庫”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI