RN sqlite 数据库 react-native-sqlite-storage 支持事务 支持离
发布时间:2020-12-12 19:15:54 所属栏目:百科 来源:网络整理
导读:1.安装 命令行进入到ReactNative项目根目录下执行 npm install react-native-sqlite-storage --save 2.进行全局Gradle设置 编辑 android/settings.gradle文件,添加以下内容 include ':react-native-sqlite-storage'project(':react-native-sqlite-storage')
1.安装 npm install react-native-sqlite-storage --save 2.进行全局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文件 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文件,引入组件 注意每一个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',()=>{ 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,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 = "2343242@qq.com"; 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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |