Hi, it's Takuya.
I'm building my own app called Inkdrop with React Native.
I needed a WebSQL-compatible library for my app to use PouchDB, so I made react-native-sqlite-2.
Why?
There is an exact library to use SQLite on RN apps, which is react-native-sqlite-storage.
But it has some advantages over it:
- It can't store string data with
\u0000
due to the react native problem.- PouchDB heavily uses the Null character in the document IDs for building index, so it won't work well.
- It's unstable for storing PouchDB's attachments: #6037.
This plugin solves these problems.
What's new in 3.x
It has a big improvement for Android!
Newer SQLite3 on Android
Even the latest version of Android is several versions behind the latest version of SQLite, whereas iOS has newer version.
React Native SQLite 2 uses sqlite-android which allows you to use the latest version of it with new SQLite features enabled:
Getting started
Add react-native-sqlite-2 to your dependencies:
$ npm install react-native-sqlite-2 --save
Link native dependencies
From react-native 0.60 autolinking will take care of the link step but don't forget to run pod install
.
$ react-native link react-native-sqlite-2
iOS
If using cocoapods in the ios/
directory run
$ pod install
Android
Please make sure AndroidX is enabled in your project by editting android/gradle.properties
and adding 2 lines:
android.useAndroidX=true
android.enableJetifier=true
Usage
import SQLite from "react-native-sqlite-2";
const db = SQLite.openDatabase("test.db", "1.0", "", 1);
db.transaction(function(txn) {
txn.executeSql("DROP TABLE IF EXISTS Users", []);
txn.executeSql(
"CREATE TABLE IF NOT EXISTS Users(user_id INTEGER PRIMARY KEY NOT NULL, name VARCHAR(30))",
[]
);
txn.executeSql("INSERT INTO Users (name) VALUES (:name)", ["nora"]);
txn.executeSql("INSERT INTO Users (name) VALUES (:name)", ["takuya"]);
txn.executeSql("SELECT * FROM `users`", [], function(tx, res) {
for (let i = 0; i < res.rows.length; ++i) {
console.log("item:", res.rows.item(i));
}
});
});
There is a test app in the test directory.
Using with PouchDB
It can be used with pouchdb-adapter-react-native-sqlite.
import PouchDB from "pouchdb-react-native";
import SQLite from "react-native-sqlite-2";
import SQLiteAdapterFactory from "pouchdb-adapter-react-native-sqlite";
const SQLiteAdapter = SQLiteAdapterFactory(SQLite);
PouchDB.plugin(SQLiteAdapter);
var db = new PouchDB("mydb", { adapter: "react-native-sqlite" });
Further informations
- GitHub repos: https://github.com/craftzdog/react-native-sqlite-2
- Inkdrop - Markdown note-taking app: https://inkdrop.app/
- Twitter: https://twitter.com/inkdrop_app