React Native 中如何使用Sqlite数据库

使用Sqllite可能用不同的环境创建出来的项目,比如说:用Expo创建的就可能和这个不一样!但是具体思路都是一样的,希望这篇文章可以帮助到大家!


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;

[java] view plain copy

  1. @Override
  2. protected List<ReactPackage> getPackages() {
  3. return Arrays.<ReactPackage>asList(
  4. new MainReactPackage(),
  5. new SQLitePluginPackage(),
  6. new BaiduMapPackage(getApplicationContext())
  7. );
  8. }

截图如下:

5.使用

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

注意每一个打印异常,不然可能看不到哪里出错了

[javascript] view plain copy

  1. import React,{Component} from ‘react‘;
  2. import{
  3. ToastAndroid,
  4. } from ‘react-native‘;
  5. import SQLiteStorage from ‘react-native-sqlite-storage‘;
  6. SQLiteStorage.DEBUG(true);
  7. var database_name = "test.db";//数据库文件
  8. var database_version = "1.0";//版本号
  9. var database_displayname = "MySQLite";
  10. var database_size = -1;//-1应该是表示无限制
  11. var db;
  12. export default class  SQLite extends Component{
  13. componentWillUnmount(){
  14. if(db){
  15. this._successCB(‘close‘);
  16. db.close();
  17. }else {
  18. console.log("SQLiteStorage not open");
  19. }
  20. }
  21. open(){
  22. db = SQLiteStorage.openDatabase(
  23. database_name,
  24. database_version,
  25. database_displayname,
  26. database_size,
  27. ()=>{
  28. this._successCB(‘open‘);
  29. },
  30. (err)=>{
  31. this._errorCB(‘open‘,err);
  32. });
  33. return db;
  34. }
  35. createTable(){
  36. if (!db) {
  37. this.open();
  38. }
  39. //创建用户表
  40. db.transaction((tx)=> {
  41. tx.executeSql(‘CREATE TABLE IF NOT EXISTS USER(‘ +
  42. ‘id INTEGER PRIMARY KEY  AUTOINCREMENT,‘ +
  43. ‘name varchar,‘+
  44. ‘age VARCHAR,‘ +
  45. ‘sex VARCHAR,‘ +
  46. ‘phone VARCHAR,‘ +
  47. ‘email VARCHAR,‘ +
  48. ‘qq VARCHAR)‘
  49. , [], ()=> {
  50. this._successCB(‘executeSql‘);
  51. }, (err)=> {
  52. this._errorCB(‘executeSql‘, err);
  53. });
  54. }, (err)=> {//所有的 transaction都应该有错误的回调方法,在方法里面打印异常信息,不然你可能不会知道哪里出错了。
  55. this._errorCB(‘transaction‘, err);
  56. }, ()=> {
  57. this._successCB(‘transaction‘);
  58. })
  59. }
  60. deleteData(){
  61. if (!db) {
  62. this.open();
  63. }
  64. db.transaction((tx)=>{
  65. tx.executeSql(‘delete from user‘,[],()=>{
  66. });
  67. });
  68. }
  69. dropTable(){
  70. db.transaction((tx)=>{
  71. tx.executeSql(‘drop table user‘,[],()=>{
  72. });
  73. },(err)=>{
  74. this._errorCB(‘transaction‘, err);
  75. },()=>{
  76. this._successCB(‘transaction‘);
  77. });
  78. }
  79. insertUserData(userData){
  80. let len = userData.length;
  81. if (!db) {
  82. this.open();
  83. }
  84. this.createTable();
  85. this.deleteData();
  86. db.transaction((tx)=>{
  87. for(let i=0; i<len; i++){
  88. var user = userData[i];
  89. let name= user.name;
  90. let age = user.age;
  91. let sex = user.sex;
  92. let phone = user.phone;
  93. let email = user.email;
  94. let qq = user.qq;
  95. let sql = "INSERT INTO user(name,age,sex,phone,email,qq)"+
  96. "values(?,?,?,?,?,?)";
  97. tx.executeSql(sql,[name,age,sex,phone,email,qq],()=>{
  98. },(err)=>{
  99. console.log(err);
  100. }
  101. );
  102. }
  103. },(error)=>{
  104. this._errorCB(‘transaction‘, error);
  105. ToastAndroid.show("数据插入失败",ToastAndroid.SHORT);
  106. },()=>{
  107. this._successCB(‘transaction insert data‘);
  108. ToastAndroid.show("成功插入 "+len+" 条用户数据",ToastAndroid.SHORT);
  109. });
  110. }
  111. close(){
  112. if(db){
  113. this._successCB(‘close‘);
  114. db.close();
  115. }else {
  116. console.log("SQLiteStorage not open");
  117. }
  118. db = null;
  119. }
  120. _successCB(name){
  121. console.log("SQLiteStorage "+name+" success");
  122. }
  123. _errorCB(name, err){
  124. console.log("SQLiteStorage "+name);
  125. console.log(err);
  126. }
  127. render(){
  128. return null;
  129. }
  130. };

‘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;
  • }
  • }
时间: 2024-08-10 19:18:42

React Native 中如何使用Sqlite数据库的相关文章

React Native中的网络请求

React Native中的网络请求fetch使用方法最为简单,但却可以实现大多数的网络请求,需要了解更多的可以访问: https://segmentfault.com/a/1190000003810652 /** * Sample React Native App * https://github.com/facebook/react-native * 周少停 2016-09-28 * fetch请求数据 header 参数 response转json 请求方式 */ import React

Windows Phone8 中如何引用 SQLite 数据库

SQLite数据库介绍 1.SQLite是一款轻型的嵌入式数据库,使用C++开发,使用非常广泛 2.SQLite是一款跨平台的数据库,支持Windows.Linux.Android.IOS.Windows Phone行装系统 3.在Windows Phone中的SQLite是一个非托管组件 4.可以在Windows运行时中使用,也可以在C#项目中使用 5.在C#项目中需要通过Windows运行时组件来访问 下面介绍如何在wp中使用SQLite开发应用程序 1.首先我们来下载数据库工具安装包,地址

react native中如何往服务器上传网络图片

1 let common_url = 'http://192.168.1.1:8080/'; //服务器地址 2 let token = ''; //用户登陆后返回的token 3 /** 4 * 使用fetch实现图片上传 5 * @param {string} url 接口地址 6 * @param {JSON} params body的请求参数 7 * @return 返回Promise 8 */ 9 function uploadImage(url,params){ 10 return

react native中Unable to load script from assets &#39;index.android.bundle&#39;解决方案

刚刚朋友问我,说是创建好一个项目,运行后报错:Unable to load script from assets 'index.android.bundle',以前好好的没出现这种现象,于是我找到一个解决方案,分享一下. 解决这个问题的方案是: 进入你该项目的根目录下的 android目录下的app目录下的src文件下的mian文件,(可能说的有点绕),在main件夹下,创建一个assets文件,这个文件是rn的资源文件夹! 之后用dos进入你的项目根目录,执行一下命令: react-nativ

React Native 中 component 生命周期

React Native 中 component 生命周期 转自 csdn 子墨博客  http://blog.csdn.net/ElinaVampire/article/details/51813677 (非原创) React Native中的component跟Android中的activity,fragment等一样,存在生命周期,下面先给出component的生命周期图 getDefaultProps object getDefaultProps() 执行过一次后,被创建的类会有缓存,映

[转] 在React Native中使用ART

http://bbs.reactnative.cn/topic/306/%E5%9C%A8react-native%E4%B8%AD%E4%BD%BF%E7%94%A8art 前半个月捣腾了一下React Native ART 现在手上闲下来了和大家分享一下React Native中的ART使用心得 React Native ART 究竟是什么? 所谓ART,是一个在React中绘制矢量图形的JS类库.这个类库抽象了一系统的通用接口,统一了SVG,canvas,VML这类矢量图形在 React中

Facebook React Native 中文教程一:介绍

React Native 中文版 Facebook 在 [React.js Conf 2015](http://conf.reactjs.com/) 大会上推出了基于 JavaScript 的开源框架 [React Native](http://facebook.github.io/react-native/),本中文教程翻译自 [React Native 官方文档](http://facebook.github.io/react-native/docs/getting-started.html

在 React Native 中使用 Redux 架构

前言 Redux 架构是 Flux 架构的一个变形,相对于 Flux,Redux 的复杂性相对较低,而且最为巧妙的是 React 应用可以看成由一个根组件连接着许多大大小小的组件的应用,Redux 也只有一个 Store,而且只用一个 state 树来管理组件的状态.随着应用逐渐变得复杂,React 将组件看成状态机的优势仿佛变成了自身的绊脚石.因为要管理的状态将会越来越多,直到你搞不清楚某个状态在不知道什么时候,由于什么原因,发生了什么变化.Redux 试图让状态的变化变得可预测.Redux

react native中一次错误排查 Error:Error: Duplicate resources

最近一直在使用react native中,遇到了很多的坑,同时也学习到了一些移动端的开发经验. 今天在做一个打包的测试时,遇到了一个问题,打包过程中报错“Error:Error: Duplicate resources”,什么意思呢,就是打包资源有重复,后来查看了一下,发现打包到android/app/src目录下的静态文件重名了. 重现步骤: 1:通过vscode打开项目,运行打包命令 react-native ram-bundle --entry-file index.js --platfo