怎么用关系型数据库API去读取已存在的数据库
这篇文章主要介绍“怎么用关系型数据库API去读取已存在的数据库”,在日常操作中,相信很多人在怎么用关系型数据库API去读取已存在的数据库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用关系型数据库API去读取已存在的数据库”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
效果如下:
该demo中操作关系型数据库的大概逻辑。
- 1.将拷贝过来的sqlite文件进行读入应用中
- 2.然后用harmonyOS提供的API去处理读入的数据并进行展示
1.将拷贝过来的sqlite文件夹读入应用
1.1首先将一个已经存在的sqlite文件放入指定位置
指定位置为/src/main/resources/rawfile,对,必须得这儿,数据库文件中的内容如下:
1.2 然后将读取上一步操作中放入的sqlite文件,将其读入本应用的所能识别的空间中(暂时先这么理解,反正只有这样做,你才能读取到)
具体的读取过程,我创建了一个文件:readSqliteFile.java(见文章最后)
这份代码中还涉及到了封装打开数据库和打开数据的操作,这一节只说一下读取上一步拷贝文件的过程。
首先通过下面两行,指定读取的数据要存入的位置:dbPath。
dirPath=newFile(context.getDataDir().toString()+"/MainAbility/databases/db");dbPath=newFile(Paths.get(dirPath.toString(),"PremierLeague.sqlite").toString());
然后通过下面一行打开刚才我们放入的sqlite文件:resource
Resourceresource=context.getResourceManager().getRawFileEntry("resources/rawfile/PremierLeague.sqlite").openRawFile();
然后读取resoruce写入dbPath
FileOutputStreamfos=newFileOutputStream(dbPath);byte[]buffer=newbyte[4096];intcount=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的全局变量
privateRdbStorestore;
定义需要的StoreConfig配置文件,可以看到配置文件中指定的数据库的名字,这里是指的刚才写入的dbPath中的。
privateStoreConfigconfig=StoreConfig.newDefaultConfig("PremierLeague.sqlite");
定义配置需要的回调函数,这里我们还用不上,所以先用空的就行
privatestaticfinalRdbOpenCallbackcallback=newRdbOpenCallback(){@OverridepublicvoidonCreate(RdbStorerdbStore){}@OverridepublicvoidonUpgrade(RdbStorerdbStore,inti,inti1){}};
2.2 打开RdbStore
首先得new一个 DatabaseHelper
DatabaseHelperhelper=newDatabaseHelper(context);
然后从new出的DatabaseHelper调用getRdbStore获得RdbStore对象
store=helper.getRdbStore(config,1,callback,null);
2.3 从上一步打开的RdbStore中进行查询
首先使用querySql传入sql语句进行查询
ResultSetresultSet=store.querySql("select*fromteam",null);
然后使用ResultSet类的goToNextRow()进行读取
while(resultSet.goToNextRow()){sqliteDatasqldata=newsqliteData();sqldata.no=resultSet.getInt(0);sqldata.clubName=resultSet.getString(1);result.add(sqldata);}
3.然后就得到了数据库文件想要的数据,这里将其存入了ArrayList,然后在需要的地方去遍历它就可以喽
下面附上readSqliteFile.java文件代码,整个demo从文章开头给出的gitee地址去下载就可以了!
packagecom.harmony.rdbstoreexample;importohos.app.AbilityContext;importohos.data.DatabaseHelper;importohos.data.rdb.RdbOpenCallback;importohos.data.rdb.RdbStore;importohos.data.rdb.StoreConfig;importohos.data.resultset.ResultSet;importohos.global.resource.Resource;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.nio.file.Paths;importjava.util.ArrayList;publicclassreadSqliteFile{privateAbilityContextcontext;privateFiledirPath;privateFiledbPath;privateRdbStorestore;privateStoreConfigconfig=StoreConfig.newDefaultConfig("PremierLeague.sqlite");privatestaticfinalRdbOpenCallbackcallback=newRdbOpenCallback(){@OverridepublicvoidonCreate(RdbStorerdbStore){}@OverridepublicvoidonUpgrade(RdbStorerdbStore,inti,inti1){}};publicreadSqliteFile(AbilityContextcontext){this.context=context;dirPath=newFile(context.getDataDir().toString()+"/MainAbility/databases/db");if(!dirPath.exists()){dirPath.mkdirs();}dbPath=newFile(Paths.get(dirPath.toString(),"PremierLeague.sqlite").toString());}privatevoidextractDB()throwsIOException{Resourceresource=context.getResourceManager().getRawFileEntry("resources/rawfile/PremierLeague.sqlite").openRawFile();if(dbPath.exists()){dbPath.delete();}FileOutputStreamfos=newFileOutputStream(dbPath);byte[]buffer=newbyte[4096];intcount=0;while((count=resource.read(buffer))>=0){fos.write(buffer,0,count);}resource.close();fos.close();}publicvoidinit()throwsIOException{extractDB();DatabaseHelperhelper=newDatabaseHelper(context);store=helper.getRdbStore(config,1,callback,null);}publicArrayListsearch(){ResultSetresultSet=store.querySql("select*fromteam",null);ArrayListresult=newArrayList();while(resultSet.goToNextRow()){sqliteDatasqldata=newsqliteData();sqldata.no=resultSet.getInt(0);sqldata.clubName=resultSet.getString(1);result.add(sqldata);}resultSet.close();returnresult;}}
到此,关于“怎么用关系型数据库API去读取已存在的数据库”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。