《ReactNative》导入SQLite

来源

https://github.com/andpor/react-native-sqlite-storage

例子

https://blog.csdn.net/xukongjing1/article/details/70141157


1.安装

import org.pgsqlite.SQLitePluginPackage;

命令行进入到ReactNative项目根目录下执行

npm install react-native-sqlite-storage --save


2.进行全局Gradle设置

编辑 android文件夹下settings.gradle文件,添加以下内容

include ':react-native-sqlite-storage'

//如果你安装的react-native-sqlite-storage版本大于等于4.0.0

project(':react-native-sqlite-storage').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sqlite-storage/platforms/android')

//否则路径

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')


修改android/app/build.gradle文件

4.编辑MainApplication.java文件,在MainActivitiy.java中注册sqlite模块

进入android\app\src\main\java\com\engcool下的MainApplication.java文件

在头部引入

import org.pgsqlite.SQLitePluginPackage;

import com.facebook.react.shell.MainReactPackage;


注册sqlite模


5.使用


编写sqlite.js文件,引入组件     import SQLiteStorage from 'react-native-sqlite-storage';

注意每一个transaction后面(err)=>{  console.log(err) }打印异常,不然可能看不到哪里出错了


importReact,{Component}from'react';

import{

  ToastAndroid,

}from'react-native';

importSQLiteStoragefrom'react-native-sqlite-storage';

SQLiteStorage.DEBUG(true);

vardatabase_name ="test.db";//数据库文件

vardatabase_version ="1.0";//版本号

vardatabase_displayname ="MySQLite";

vardatabase_size =-1;//-1应该是表示无限制

vardb;

exportdefaultclassSQLiteextendsComponent{

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);

      });

returndb;

  }

  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){

letlen = userData.length;

if(!db) {

this.open();

    }

this.createTable();

this.deleteData();

db.transaction((tx)=>{

for(leti=0; i

varuser = userData[i];

letname= user.name;

letage = user.age;

letsex = user.sex;

letphone = user.phone;

letemail = user.email;

letqq = user.qq;

letsql ="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(){

returnnull;

}

};

在其他类中调用,使用时先引入sqlite.js



importReact, { Component }from'react';

import{

  AppRegistry,

  Text,

  View,

  Navigator,

  StyleSheet,

}from'react-native';

importSQLitefrom'./sqlite';

varsqLite =newSQLite();

vardb;

classAppextendsComponent{

compennetDidUnmount(){

    sqLite.close();

  }

  componentWillMount(){

//开启数据库

if(!db){

      db = sqLite.open();

    }

//建表

    sqLite.createTable();

//删除数据

    sqLite.deleteData();

//模拟一条数据

varuserData = [];

varuser = {};

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)=>{

varlen = results.rows.length;

for(leti=0; i

varu = results.rows.item(i);

//一般在数据查出来之后,  可能要 setState操作,重新渲染页面

alert("姓名:"+u.name+",年龄:"+u.age+",电话:"+u.phone);

        }

      });

},(error)=>{//打印异常信息

console.log(error);

    });

  }

render(){

returnnull;

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341