dependencies:
flutter:
sdk: flutter
mysql1: ^0.20.0
import 'dart:async';
import 'package:mysql1/mysql1.dart';
class MySqlHelper {
static const _host = 'localhost';
static const _port = 3333;
static const _user = 'user';
static const _db = 'table';
static const _password = 'pass';
MySqlConnection? _connection;
MySqlHelper() {
_init();
}
Future<void> _init() async {
try {
_connection = await MySqlConnection.connect(ConnectionSettings(
host: _host,
port: _port,
user: _user,
db: _db,
password: _password,
));
} catch (e) {
// Handle the exception appropriately, e.g., log the error or rethrow.
throw Exception('Failed to connect to the database: $e');
}
}
Future<int?> create(String tableName, Map<String, dynamic> data) async {
if (_connection == null) {
throw Exception('Database connection is not initialized');
}
var columns = data.keys.join(', ');
var placeholders = List.generate(data.length, (index) => '?').join(', ');
var values = data.values.toList();
var query = 'INSERT INTO $tableName ($columns) VALUES ($placeholders)';
var result = await _connection!.query(query, values);
return result.insertId;
}
Future<List<Map<String, dynamic>>> read(String tableName) async {
if (_connection == null) {
throw Exception('Database connection is not initialized');
}
var query = 'SELECT * FROM $tableName';
var results = await _connection!.query(query);
return results.map((row) => Map.fromEntries(row.asMap().entries.map((e) => MapEntry(e.key.toString(), e.value)))).toList();
}
Future<void> update(String tableName, Map<String, dynamic> data, String whereColumn, dynamic whereValue) async {
if (_connection == null) {
throw Exception('Database connection is not initialized');
}
var sets = data.entries.map((e) => '${e.key} = ?').join(', ');
var values = data.values.toList()..add(whereValue);
var query = 'UPDATE $tableName SET $sets WHERE $whereColumn = ?';
await _connection!.query(query, values);
}
Future<void> delete(String tableName, String whereColumn, dynamic whereValue) async {
if (_connection == null) {
throw Exception('Database connection is not initialized');
}
var query = 'DELETE FROM $tableName WHERE $whereColumn = ?';
await _connection!.query(query, [whereValue]);
}
Future<void> close() async {
if (_connection != null) {
await _connection!.close();
_connection = null;
}
}
}
// 使用示例
void main() async {
final helper = MySqlHelper();
// 等待数据库连接初始化完成
await Future.delayed(Duration(seconds: 2)); // 仍然使用延迟作为示例,实际中应该监听连接状态
try {
// 插入数据
int? insertId = await helper.create('your_table_name', {
'column1': 'value1',
'column2': 'value2',
});
print('Inserted row with ID: $insertId');
// 读取数据
List<Map<String, dynamic>> rows = await helper.read('your_table_name');
for (var row in rows) {
print(row);
}
// 更新数据
await helper.update('your_table_name', {
'column1': 'updated_value1',
}, 'id', insertId);
// 删除数据
await helper.delete('your_table_name', 'id', insertId);
} catch (e) {
print('An error occurred: $e');
} finally {
// 关闭数据库连接
await helper.close();
}
}
// 使用示例
void main() async {
final helper = MySqlHelper();
// 等待数据库连接初始化完成
await Future.delayed(Duration(seconds: 2)); // 仍然使用延迟作为示例,实际中应该监听连接状态
try {
// 插入数据
int? insertId = await helper.create('your_table_name', {
'column1': 'value1',
'column2': 'value2',
});
print('Inserted row with ID: $insertId');
// 读取数据
List<Map<String, dynamic>> rows = await helper.read('your_table_name');
for (var row in rows) {
print(row);
}
// 更新数据
await helper.update('your_table_name', {
'column1': 'updated_value1',
}, 'id', insertId);
// 删除数据
await helper.delete('your_table_name', 'id', insertId);
} catch (e) {
print('An error occurred: $e');
} finally {
// 关闭数据库连接
await helper.close();
}
}