test database
This commit is contained in:
parent
67a4f27b8d
commit
f13166f490
128
src/pages/DatabaseServiceTest.js
Normal file
128
src/pages/DatabaseServiceTest.js
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
// src/pages/DatabaseTestPage.js
|
||||||
|
import React, {useState, useEffect} from 'react';
|
||||||
|
import {
|
||||||
|
View,
|
||||||
|
Text,
|
||||||
|
TextInput,
|
||||||
|
Button,
|
||||||
|
ScrollView,
|
||||||
|
StyleSheet,
|
||||||
|
} from 'react-native';
|
||||||
|
import {initializeDatabase} from '../utils/DatabaseService';
|
||||||
|
|
||||||
|
const DatabaseTestPage = () => {
|
||||||
|
const [db, setDb] = useState(null);
|
||||||
|
const [users, setUsers] = useState([]);
|
||||||
|
const [username, setUsername] = useState('');
|
||||||
|
const [email, setEmail] = useState('');
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
initializeDatabase().then(database => {
|
||||||
|
setDb(database);
|
||||||
|
fetchUsers(database);
|
||||||
|
});
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const fetchUsers = database => {
|
||||||
|
database.transaction(tx => {
|
||||||
|
tx.executeSql('SELECT * FROM Users', [], (tx, results) => { m
|
||||||
|
const fetchedUsers = [];
|
||||||
|
for (let i = 0; i < results.rows.length; i++) {
|
||||||
|
fetchedUsers.push(results.rows.item(i));
|
||||||
|
}
|
||||||
|
setUsers(fetchedUsers);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const addUser = () => {
|
||||||
|
if (db && username && email) {
|
||||||
|
db.transaction(tx => {
|
||||||
|
tx.executeSql(
|
||||||
|
'INSERT INTO Users (username, email, created_at, updated_at) VALUES (?, ?, datetime("now"), datetime("now"))',
|
||||||
|
[username, email],
|
||||||
|
() => {
|
||||||
|
fetchUsers(db);
|
||||||
|
setUsername('');
|
||||||
|
setEmail('');
|
||||||
|
},
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const deleteUser = userId => {
|
||||||
|
if (db) {
|
||||||
|
db.transaction(tx => {
|
||||||
|
tx.executeSql('DELETE FROM Users WHERE id = ?', [userId], () => {
|
||||||
|
fetchUsers(db);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ScrollView style={styles.container}>
|
||||||
|
<View style={styles.form}>
|
||||||
|
<TextInput
|
||||||
|
style={styles.input}
|
||||||
|
placeholder="Username"
|
||||||
|
value={username}
|
||||||
|
onChangeText={setUsername}
|
||||||
|
/>
|
||||||
|
<TextInput
|
||||||
|
style={styles.input}
|
||||||
|
placeholder="Email"
|
||||||
|
value={email}
|
||||||
|
onChangeText={setEmail}
|
||||||
|
/>
|
||||||
|
<Button title="Add User" onPress={addUser} />
|
||||||
|
</View>
|
||||||
|
<View style={styles.usersList}>
|
||||||
|
{users.map(user => (
|
||||||
|
<View key={user.id} style={styles.userItem}>
|
||||||
|
<Text style={styles.userText}>
|
||||||
|
{user.id}: {user.username} - {user.email}
|
||||||
|
</Text>
|
||||||
|
<Button title="Delete" onPress={() => deleteUser(user.id)} />
|
||||||
|
</View>
|
||||||
|
))}
|
||||||
|
</View>
|
||||||
|
</ScrollView>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
padding: 20,
|
||||||
|
marginTop: 50,
|
||||||
|
},
|
||||||
|
form: {
|
||||||
|
marginBottom: 20,
|
||||||
|
},
|
||||||
|
input: {
|
||||||
|
marginBottom: 10,
|
||||||
|
borderWidth: 1,
|
||||||
|
borderColor: '#ccc',
|
||||||
|
paddingHorizontal: 10,
|
||||||
|
paddingVertical: 5,
|
||||||
|
},
|
||||||
|
usersList: {
|
||||||
|
borderTopWidth: 1,
|
||||||
|
borderColor: '#ccc',
|
||||||
|
},
|
||||||
|
userItem: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
alignItems: 'center',
|
||||||
|
paddingVertical: 10,
|
||||||
|
borderBottomWidth: 1,
|
||||||
|
borderColor: '#ccc',
|
||||||
|
},
|
||||||
|
userText: {
|
||||||
|
fontSize: 16,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default DatabaseTestPage;
|
||||||
66
src/utils/DatabaseService.js
Normal file
66
src/utils/DatabaseService.js
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
// DatabaseService.js
|
||||||
|
import SQLite from 'react-native-sqlite-storage';
|
||||||
|
|
||||||
|
SQLite.enablePromise(true);
|
||||||
|
|
||||||
|
const databaseName = 'MyAccountApp.db';
|
||||||
|
const databaseVersion = '1.0';
|
||||||
|
const databaseDisplayName = 'My Account App Database';
|
||||||
|
const databaseSize = 200000; // 大约 200KB
|
||||||
|
|
||||||
|
async function initializeDatabase() {
|
||||||
|
try {
|
||||||
|
const db = await SQLite.openDatabase(
|
||||||
|
databaseName,
|
||||||
|
databaseVersion,
|
||||||
|
databaseDisplayName,
|
||||||
|
databaseSize,
|
||||||
|
);
|
||||||
|
|
||||||
|
await db.transaction(async tx => {
|
||||||
|
// 创建 Users 表
|
||||||
|
await tx.executeSql(
|
||||||
|
'CREATE TABLE IF NOT EXISTS Users (id INTEGER PRIMARY KEY AUTOINCREMENT, username VARCHAR(30), password VARCHAR(30), email VARCHAR(30), created_at DATETIME, updated_at DATETIME)',
|
||||||
|
);
|
||||||
|
|
||||||
|
// 创建 Accounts 表
|
||||||
|
await tx.executeSql(
|
||||||
|
'CREATE TABLE IF NOT EXISTS Accounts (id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, name VARCHAR(30), currency VARCHAR(10), balance DECIMAL, created_at DATETIME, updated_at DATETIME)',
|
||||||
|
);
|
||||||
|
|
||||||
|
// 创建 Ledgers 表
|
||||||
|
await tx.executeSql(
|
||||||
|
'CREATE TABLE IF NOT EXISTS Ledgers (id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, name VARCHAR(30), created_at DATETIME, updated_at DATETIME)',
|
||||||
|
);
|
||||||
|
|
||||||
|
// 创建 Transactions 表
|
||||||
|
await tx.executeSql(
|
||||||
|
'CREATE TABLE IF NOT EXISTS Transactions (id INTEGER PRIMARY KEY AUTOINCREMENT, ledger_id INTEGER, account_id INTEGER, type VARCHAR(10), amount DECIMAL, currency VARCHAR(10), date DATE, description VARCHAR(255), created_at DATETIME, updated_at DATETIME)',
|
||||||
|
);
|
||||||
|
|
||||||
|
// 创建 FixedExpenses 表
|
||||||
|
await tx.executeSql(
|
||||||
|
'CREATE TABLE IF NOT EXISTS FixedExpenses (id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, name VARCHAR(30), amount DECIMAL, frequency VARCHAR(10), created_at DATETIME, updated_at DATETIME)',
|
||||||
|
);
|
||||||
|
|
||||||
|
// 创建 Subscriptions 表
|
||||||
|
await tx.executeSql(
|
||||||
|
'CREATE TABLE IF NOT EXISTS Subscriptions (id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, name VARCHAR(30), amount DECIMAL, start_date DATE, end_date DATE, created_at DATETIME, updated_at DATETIME)',
|
||||||
|
);
|
||||||
|
|
||||||
|
// 创建 AAPayments 表
|
||||||
|
await tx.executeSql(
|
||||||
|
'CREATE TABLE IF NOT EXISTS AAPayments (id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, event VARCHAR(30), total_amount DECIMAL, participants INTEGER, paid_by INTEGER, created_at DATETIME, updated_at DATETIME)',
|
||||||
|
);
|
||||||
|
|
||||||
|
// 其他表的创建语句...
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('Database initialized');
|
||||||
|
return db;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error initializing database:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export {initializeDatabase};
|
||||||
Loading…
Reference in New Issue
Block a user