DEV Community

loading...

Announcing react-native-sqlite-2@3.0.1!

Takuya Matsuyama
Indie developer based in Osaka, Japan. A solo dev of Inkdrop: https://www.inkdrop.app/
・2 min read

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:

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

iOS

If using cocoapods in the ios/ directory run

$ pod install
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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));
    }
  });
});
Enter fullscreen mode Exit fullscreen mode

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" });
Enter fullscreen mode Exit fullscreen mode

Further informations

Discussion (1)

Collapse
hariharan888 profile image
Hariharan

any plans in adding createFromLocation functionality?