flutter 操作mysql

引入模块

dependencies:

flutter:

sdk: flutter

mysql1: ^0.20.0

mysql helper 的代码

dart 复制代码
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();  
  }  
}
dart 复制代码
// 使用示例  
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();
  }
}
相关推荐
倔强的石头_2 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
云技纵横2 天前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql
沉默王二2 天前
面试官:RAG 不用向量数据库,用 MySQL 硬扛?我:100 万向量不是很轻松?
mysql·面试·ai编程
程序员老刘2 天前
跨平台开发地图 | 2026年6月
flutter·ai编程·客户端
冬奇Lab2 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
小猿姐2 天前
MySQL Top 10 热点问题 AI 运维实战:从内核诊断到云原生运维
mysql·云原生·aiops
悟空瞎说2 天前
Flutter 架构详解:新手必懂底层原理
flutter
SoaringHeart3 天前
Flutter最佳实践:IM聊天文字链接自动识别跳转
前端·flutter
ClouGence3 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle