怎么用关系型数据库API去读取已存在的数据库

56次阅读
没有评论

共计 4422 个字符,预计需要花费 12 分钟才能阅读完成。

这篇文章主要介绍“怎么用关系型数据库 API 去读取已存在的数据库”,在日常操作中,相信很多人在怎么用关系型数据库 API 去读取已存在的数据库问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用关系型数据库 API 去读取已存在的数据库”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

效果如下:

该 demo 中操作关系型数据库的大概逻辑。

– 1. 将拷贝过来的 sqlite 文件进行读入应用中

– 2. 然后用 harmonyOS 提供的 API 去处理读入的数据并进行展示

1. 将拷贝过来的 sqlite 文件夹读入应用

1.1 首先将一个已经存在的 sqlite 文件放入指定位置

指定位置为 /src/main/resources/rawfile, 对,必须得这儿,数据库文件中的内容如下:

1.2   然后将读取上一步操作中放入的 sqlite 文件,将其读入本应用的所能识别的空间中 (暂时先这么理解,反正只有这样做,你才能读取到)

具体的读取过程,我创建了一个文件:readSqliteFile.java(见文章最后)

这份代码中还涉及到了封装打开数据库和打开数据的操作,这一节只说一下读取上一步拷贝文件的过程。

首先通过下面两行,指定读取的数据要存入的位置: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 去处理读入的数据并进行展示

这一块的代码也在上一节展示的 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 去读取已存在的数据库”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计4422字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)