温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-10-22 10:30:55 来源:亿速云 阅读:195 作者:iii 栏目:数据库

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

效果如下:

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

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

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

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

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

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

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

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

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI