React Native 中如何使用Sqlite數據庫
阿新 • • 發佈:2017-06-15
strong 根目錄 nod tro pla ucc lose exist splay 使用Sqllite可能用不同的環境創建出來的項目,比如說:用Expo創建的就可能和這個不一樣!但是具體思路都是一樣的,希望這篇文章可以幫助到大家!
1.安裝
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‘;
註意每一個打印異常,不然可能看不到哪裏出錯了
[javascript] view plain copy- 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;
- }
- };
‘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;
- }
- }
React Native 中如何使用Sqlite數據庫