javascript - 如何将 sqlite 与 react-native 一起使用?
问题描述
我正在使用 react-native 应用程序,现在使用 SQLite 实现持久数据存储。我遵循文档,但它不起作用。
我将数据库存储在 android/app/src/main/assets/test.db
没有错误,但没有显示任何内容。
这是我实现的代码
let SQLite = require('react-native-sqlite-storage')
class HomeScreen extends React.Component {
constructor(props) {
super(props);
this.state = {
sqliteData: [],
};
let db = SQLite.openDatabase({name: 'test.db', createFromLocation : "~test.db", location: 'Library'}, this.openCB, this.errorCB);
db.transaction((tx) => {
tx.executeSql('SELECT * FROM testTable', [], (tx, results) => {
var len = results.rows.length;
var rows = []
for (var i = 0; i < len.length; i++) {
var row = results.rows.item(i);
rows.push(row)
console.log(row + row.userName)
}
this.setState({sqliteData: rows});
})
})
}
errorCB(err) {
console.log("SQL Error: " + err);
}
successCB() {
console.log("SQL executed fine");
}
openCB() {
console.log("Database OPENED");
}
render(){
return(
<Flatlist>--showing all items--</Flatlist>
)
}
}
解决方案
您需要安装npm install expo-sqlite
,然后您需要创建一个 SQLite 数据库并将其存储在您的项目根文件夹中并尝试此代码示例
import React from 'react';
import { StyleSheet, Text, View,FlatList,Alert} from 'react-native';
import { TextInput,Button,IconButton,Colors } from 'react-native-paper';
import { SQLite } from 'expo-sqlite';
const db = SQLite.openDatabase('test.db');
class UsersScreen extends React.Component
{
constructor(props) {
super(props);
this.state = {
FlatListItems: [],
};
db.transaction(tx => {
tx.executeSql('SELECT * FROM users', [], (tx, results) => {
var temp = [];
for (let i = 0; i < results.rows.length; ++i) {
temp.push(results.rows.item(i));
}
this.setState({
FlatListItems: temp,
});
});
});
}
ListViewItemSeparator = () => {
return (
<View style={{ height: 0.2, width: '100%', backgroundColor: '#808080' }} />
);
};
render()
{
return(
<View>
<FlatList
data={this.state.FlatListItems}
ItemSeparatorComponent={this.ListViewItemSeparator}
keyExtractor={(item, index) => index.toString()}
renderItem={({ item }) => (
<View key={item.userid} style={{ backgroundColor: 'white', padding: 20 }}>
<Text>Id: {item.userid}</Text>
<Text>Name: {item.firstname }</Text>
<Text>UserName: {item.username }</Text>
<Text>Email: {item.email}</Text>
<Text>Password: {item.password}</Text>
<Button icon="person-add" mode="contained" style={styles.buton} onPress={() => this.props.navigation.navigate("DeleteUser",{"UserId":item.userid})}> Delete User </Button>
<Button icon="person-add" mode="contained" style={styles.buton} onPress={() => this.props.navigation.navigate("EditUser",{"UserId":item.userid})}> Edit User </Button>
</View>
)}
/>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
backgroundColor: '#fff',
},
textinput:{
marginLeft:5,
marginLeft:5,
backgroundColor: 'transparent'
},
buton:{
margin:10,
marginBottom:10,
backgroundColor: '#f05555'
}
});
export default UsersScreen;
这段代码是我的 React Native App 的一部分。快乐编码。:)
推荐阅读
- javascript - 更改元素时自动保存
- javascript - svg 转换属性正在放置带有间隙的元素
- php - 如何打印 PHP 中的值,这些值以数组格式存储在 mysql 中同名
- bluetooth-lowenergy - 如何在后台运行连接到 BLE 外围设备的 watchOS 应用程序?
- java - 泛型方法中需要 Java 冗余强制转换
- javascript - iOs 构建失败 - UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“toLowerCase”
- prometheus - 将指标与警报的不同标签相结合
- c# - 将数字从 excel 插入到 Visual Studio C# 代码编辑器作为二维双数组
- c - C 从 FILE* 打印文件路径
- javascript - 用 JavaScript 编码时是否可以操作图像的 CSS?