React Native 0.71.3版本集成SQLite数据库,使用react-native-quick-sqlite插件,而不是react-native-sqlite-storage插件

最近在使用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.

3、GitHub - andpor/react-native-sqlite-storage: Full featured SQLite3 Native Plugin for React Native (Android and iOS)

4、How to select the best React Native Local Database?

5、React-Native 集成SQLite数据库_react native sqlite_晒干的老咸鱼的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/qq_35624642/article/details/129352603
今日推荐