SQLite Storage for React Native
npm install @cliqz-oss/react-native-sqlite-2SQLite3 Native Plugin for React Native for Android/iOS/Windows.
This plugin provides a WebSQL-compatible API to store data in a react native app, by using a SQLite database on the native side.
Inspired by fantastic work done by Nolan Lawson.
It should be a drop-in replacement with react-native-sqlite-storage.
It works pretty well with PouchDB on React Native app.
The reason of this plugin is that react-native-sqlite-storage has some problems to use with PouchDB:
* 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 avoids these problems.
``shell`
$ npm install react-native-sqlite-2 --save
`shell`
$ react-native link react-native-sqlite-2
#### iOS
In Xcode, add libsqlite3.tbd to your project's Build Phases ➜ Link Binary With Libraries.
#### iOS
1. In XCode, in the project navigator, right click Libraries ➜ Add Files to [your project's name]node_modules
2. Go to ➜ react-native-sqlite-2 and add RNSqlite2.xcodeprojlibRNSqlite2.a
3. In Xcode, in the project navigator, select your project. Add to your project's Build Phases ➜ Link Binary With LibrariesCmd+R
4. Run your project ()<
#### Android
1. Open up android/app/src/main/java/[...]/MainActivity.javaimport dog.craftz.sqlite_2.RNSqlite2Package;
- Add to the imports at the top of the filenew RNSqlite2Package()
- Add to the list returned by the getPackages() methodandroid/settings.gradle
2. Append the following lines to :`
`
include ':react-native-sqlite-2'
project(':react-native-sqlite-2').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sqlite-2/android')
android/app/build.gradle
3. Insert the following lines inside the dependencies block in :`
`
compile project(':react-native-sqlite-2')
#### Windows
1. Open the solution in Visual Studio for your Windows apps.Add
- Right click your in the Explorer and click > Existing Project...../
- [UWP] Navigate to and add RNSqlite2.csproj../
[WPF] Navigate to and add RNSqlite2.Net46.csproj.Add
- Right click on your React Native Windows app under your solutions directory and click > Reference....RNSqlite2
- [UWP] Check the you just added and press Ok.RNSqlite2.Net46
[WPF] Check the you just added and press Ok.MainPage.cs
2. Open in your app
- Edit it like below:
`
using RNSqlite2;
get
{
return new List
{
new MainReactPackage(),
new RNSqlite2Package(),
};
}
`
`javascript
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.
It can be used with pouchdb-adapter-react-native-sqlite.
`javascript
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' })
``
https://github.com/nolanlawson/cordova-plugin-sqlite-2
The issues and limitations for the actual SQLite can be found on this site.