RN sqlite 数据库 react-native-sqlite-storage 支持事务 支持离线 支持持久
1.安装
命令行进入到ReactNative项目根目录下执行
npm install react-native-sqlite-storage --save
2.进行全局Gradle设置
编辑 android/settings.gradle文件,添加以下内容
include ':react-native-sqlite-storage' project(':react-native-sqlite-storage').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sqlite-storage/src/android')
3.修改android/app/build.gradle文件
dependencies 里面添加
compile project(':react-native-sqlite-storage')
4.编辑MainApplication.java文件,在MainActivitiy.java中注册sqlite模块
import org.pgsqlite.SQLitePluginPackage;
@Override protected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( new MainReactPackage(), new SQLitePluginPackage(), new BaiduMapPackage(getApplicationContext()) ); }
5.使用编写sqlite.js文件,引入组件
import SQLiteStorage from 'react-native-sqlite-storage';
注意每一个transaction后面(err)=>{ console.log(err) }打印异常,不然可能看不到哪里出错了
import React,{Component} from 'react'; import{ ToastAndroid, } from 'react-native'; import SQLiteStorage from 'react-native-sqlite-storage'; SQLiteStorage.DEBUG(true); var database_name = "test.db";//数据库文件 var database_version = "1.0";//版本号 var database_displayname = "MySQLite"; var database_size = -1;//-1应该是表示无限制 var db; export default class SQLite extends Component{ componentWillUnmount(){ if(db){ this._successCB('close'); db.close(); }else { console.log("SQLiteStorage not open"); } } open(){ db = SQLiteStorage.openDatabase( database_name, database_version, database_displayname, database_size, ()=>{ this._successCB('open'); }, (err)=>{ this._errorCB('open',err); }); return db; } createTable(){ if (!db) { this.open(); } //创建用户表 db.transaction((tx)=> { tx.executeSql('CREATE TABLE IF NOT EXISTS USER(' + 'id INTEGER PRIMARY KEY AUTOINCREMENT,' + 'name varchar,'+ 'age VARCHAR,' + 'sex VARCHAR,' + 'phone VARCHAR,' + 'email VARCHAR,' + 'qq VARCHAR)' , [], ()=> { this._successCB('executeSql'); }, (err)=> { this._errorCB('executeSql', err); }); }, (err)=> {//所有的 transaction都应该有错误的回调方法,在方法里面打印异常信息,不然你可能不会知道哪里出错了。 this._errorCB('transaction', err); }, ()=> { this._successCB('transaction'); }) } deleteData(){ if (!db) { this.open(); } db.transaction((tx)=>{ tx.executeSql('delete from user',[],()=>{ }); }); } dropTable(){ db.transaction((tx)=>{ tx.executeSql('drop table user',[],()=>{ }); },(err)=>{ this._errorCB('transaction', err); },()=>{ this._successCB('transaction'); }); } insertUserData(userData){ let len = userData.length; if (!db) { this.open(); } this.createTable(); this.deleteData(); db.transaction((tx)=>{ for(let i=0; i<len; i++){ var user = userData[i]; let name= user.name; let age = user.age; let sex = user.sex; let phone = user.phone; let email = user.email; let qq = user.qq; let sql = "INSERT INTO user(name,age,sex,phone,email,qq)"+ "values(?,?,?,?,?,?)"; tx.executeSql(sql,[name,age,sex,phone,email,qq],()=>{ },(err)=>{ console.log(err); } ); } },(error)=>{ this._errorCB('transaction', error); ToastAndroid.show("数据插入失败",ToastAndroid.SHORT); },()=>{ this._successCB('transaction insert data'); ToastAndroid.show("成功插入 "+len+" 条用户数据",ToastAndroid.SHORT); }); } close(){ if(db){ this._successCB('close'); db.close(); }else { console.log("SQLiteStorage not open"); } db = null; } _successCB(name){ console.log("SQLiteStorage "+name+" success"); } _errorCB(name, err){ console.log("SQLiteStorage "+name); console.log(err); } render(){ return null; } };
在其他类中调用,使用时先引入sqlite.js
import React, { Component } from 'react'; import { AppRegistry, Text, View, Navigator, StyleSheet, } from 'react-native'; import SQLite from './sqlite'; var sqLite = new SQLite(); var db; class App extends Component{ compennetDidUnmount(){ sqLite.close(); } componentWillMount(){ //开启数据库 if(!db){ db = sqLite.open(); } //建表 sqLite.createTable(); //删除数据 sqLite.deleteData(); //模拟一条数据 var userData = []; var user = {}; user.name = "张三"; user.age = "28"; user.sex = "男"; user.phone = "18900001111"; user.email = "[email protected]"; user.qq = "111222"; userData.push(user); //插入数据 sqLite.insertUserData(userData); //查询 db.transaction((tx)=>{ tx.executeSql("select * from user", [],(tx,results)=>{ var len = results.rows.length; for(let i=0; i<len; i++){ var u = results.rows.item(i); //一般在数据查出来之后, 可能要 setState操作,重新渲染页面 alert("姓名:"+u.name+",年龄:"+u.age+",电话:"+u.phone); } }); },(error)=>{//打印异常信息 console.log(error); }); } render(){ return null; } }
相关推荐
DAV数据库 2020-06-17
airfling 2020-05-31
zbcaicai 2020-05-26
beibeijia 2020-04-25
Rain 2020-04-16
Plant 2020-04-08
园搬家测试账号 2020-03-25
MFCJCK 2020-02-24
xiaoxiangyu 2020-02-23
Plant 2020-02-03
CharlesYooSky 2020-02-01
MFCJCK 2020-01-31
nxcjh 2020-01-29
wintershii 2020-01-18
zbcaicai 2020-01-03
MFCJCK 2019-12-30
airfling 2019-12-28
Plant 2019-12-27
Dlanguage 2019-12-27
Dlanguage 2019-12-25
whyname 2019-12-23