最近在使用React Native的最新版0.71.3版本开发Web3 的APP,需要用到SQLite数据库,本地数据都是存在SQLite库里,看了之前使用最多的插件(react-native-sqlite-storage),但GitHub上的代码都两年没更新了,于是就找到了一款新的新插件,一直在更新,并且支持最新版React Native 0.71.3版本。
同时也支持Android和iOS,实际测试了也没问题。作者一直在更新代码(react-native-quick-sqlite),使用也非常简单
yarn add react-native-quick-sqlite
npx pod-install
由于项目数据已经存好在自建的SQLite数据库了,我把数据库放在资源文件夹下,想直接读取数据,但试了几次都不行,最后,才摸索到,安卓端的数据库是被隐藏起来的,并且存放位置是固定的,不能更改,iOS也是只有三种指定位置。不能直接读取指定xxx.db文件。于是才想到解决方案,于是想到了能通过SQL脚本去创建表并且添加数据。那就通过建表语句建表,在插入数据。
弄明白后,插件的用法其实也很简单
直接上代码,下面的是个简单的例子,更详细的用法可以去官网的例子,也可以执行批量SQL语句。
import {open} from 'react-native-quick-sqlite'
/**
* 初始化数据库
* @author QC
* @since 20230204
*/
export async function typeORMInit() {
try {
// 会自动连接数据库并且建库,库名自己取
const db = open({name:'better.db', location: 'default'})
// 查询SQL
const {rows}:any = db.execute('select name from sqlite_master ')
console.log(rows)
// 建表SQL
const rs:any = db.executeAsync('create table main.book_info\n(\n "order" INTEGER not null\n primary key,\n title_short TEXT not null,\n title_full TEXT not null,\n abbreviation TEXT not null,\n category TEXT not null,\n otnt TEXT not null,\n chapters INTEGER\n);\n\ncreate unique index main.book_info_abbreviation\n on main.book_info (abbreviation);\n\ncreate unique index main.book_info_order\n on main.book_info ("order");\n\ncreate unique index main.book_info_title_full\n on main.book_info (title_full);\n\ncreate unique index main.book_info_title_short\n on main.book_info (title_short);\n\n')
console.log(rs)
rows.forEach((row:any) => {
console.log(row)
})
} catch (e:any) {
console.error('Executing SQL commands error:', e.message);
}
}
在Android下,由于数据库文件位于固定位置,所以上面代码中location参数是无效的。
在IOS下,location有以下3个可选参数:分别为
default:数据文件会放置在Library/LocalDatabase子目录下,对iTunes不可见,也不会被iCloud备份
Library:数据文件会放置在Library子目录下,对iTunes不可见,但是会iCloud备份
Documents:数据文件会放置在Library子目录下,对iTunes可见,同时会iCloud备份
最终集成这个SQLite的坑在于Android和iOS都不能直接读取指定的xxx.db 文件需要通过接口或第三方包去调用创建数据库、建表、写入数据后才能读取。最终原因还是自己不熟悉Android和iOS的开发所导致的。所以项目中你不需要放xxx.db文件,只需要放SQL脚本,初始化时去建立库建表插入数据。项目的完整目录结构如下:
不过官网中说了下读取已存在的库,我没是成功,你可以试试:
参考文献:
1、react-native-quick-sqlite - npm
2、GitHub - ospfranco/react-native-quick-sqlite: Fast SQLite for react-native.
4、How to select the best React Native Local Database?
5、React-Native 集成SQLite数据库_react native sqlite_晒干的老咸鱼的博客-CSDN博客