搜索插件、代码仓与 APP 分类

插件详情v2.1.14

mysql_utils

这是 [mysql_client_plus] 帮助库,让 MySQL 的使用更加简单便捷。

AndroidiOSmacOSWindowsLinux
近 30 天下载
279
喜欢数
62
Pub 分数
160

安装插件

flutter pub add mysql_utils

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

mysql_utils 是 mysql_client_plus 的一个辅助库,可简化 Flutter 应用程序中的 MySQL 数据库交互。它提供了连接 MySQL 数据库、执行查询和处理结果的简化方法,最大限度地减少了样板代码。该库旨在提升开发人员的生产力,抽象了常见操作,同时保持与 Android、iOS、macOS、Windows 和 Linux 等多个平台的兼容性。该包非常适合需要可靠且简单的 MySQL 集成而无需复杂设置的项目。

适合场景

  • 简单的 MySQL 查询执行
  • 数据库连接管理
  • 跨平台数据库访问
  • 简化版 CRUD 操作
  • 与 mysql_client_plus 的集成

主要特点

  • 易于使用的查询界面
  • 基于 mysql_client_plus
  • 支持所有主要的桌面和移动平台
  • 减少样板代码
  • 自动结果解析

适合对象

  • 需要 MySQL 连接的 Flutter 应用
  • 寻求简单数据库助手的开发者
  • 使用 mysql_client_plus 的项目
  • 后端服务与 MySQL 数据库
  • 使用数据库进行快速原型设计

使用建议

  • 需要 mysql_client_plus 作为依赖项
  • 仅限 MySQL 数据库
  • 不适合复杂的SQL事务
  • 无内置迁移支持
  • 依赖外部 MySQL 服务器的可用性

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

mysql_utils

Pub

Flutter mysql plugin helps extend classes.

mysql_client has been abandoned and is now maintained by the author of this library. The new library is mysql_client_plus Pub。

If you use sqlite, you can also try sqlite_utils.

简体中文

Pub install

Install

New features [2.1.7]

  • Updated mysql_client_plus to version ^0.0.32
  • Updated settings from Map to MysqlUtilsSettings ⚠️⚠️⚠️
  • Added support for BLOB and JSON types
  • Added support for SSL certificates
  • Added support for calling stored procedures
  • Added support for sha256_password authentication
  • Added global debug option
  • Added tests
APIs
Initialization connection

Use the singleton mode, and call close() after use to close the database connection.

 var db = MysqlUtils(
  // ⚠️⚠️⚠️ settings from `Map` to `MysqlUtilsSettings`
  settings: MysqlUtilsSettings(
    // The hostname of the MySQL server, defaults to localhost.
    host: '127.0.0.1',
    // The port number to connect to, defaults to 3306.
    port: 3306,
    // The username to connect as, defaults to root.
    user: 'your_user_sha256',
    // The password to connect with, defaults to empty string.
    password: 'your_password_sha256',
    // The database to use, defaults to empty string.
    db: 'testdb',
    // Whether to use SSL, defaults to false.
    secure: true,
    // The prefix to use for table names, defaults to empty string.
    prefix: '',
    // The maximum number of connections to keep open, defaults to 1000.
    maxConnections: 1000,
    // The timeout in milliseconds for each connection, defaults to 10000.
    timeoutMs: 10000,
    // Whether to escape all queries, defaults to true.
    sqlEscape: true,
    // Whether to use a connection pool, defaults to false.
    pool: true,
    // The collation to use for all queries, defaults to utf8mb4_general_ci.
    collation: 'utf8mb4_general_ci',
    // Whether to use SSL, defaults to false.
    debug: true,
    // The SSL options to use for all queries, defaults to null.
    // securityContext: SecurityContext(),
    // sslMode: SslMode.require,
    // onBadCertificate: (certificate) => true,
  ),
  errorLog: (error) {
    print(error);
  },
  sqlLog: (sql) {
    print(sql);
  },
  connectInit: (db1) async {
    print('whenComplete');
  }
);
query

Native query

//var row = await db.query('select id from test_data2 where id=? or string_column like ?', whereValues: [1, '%串%'], isStmt: true);
var row = await db.query("select id from test_data2 where id=1 or string_column like '%mysql%'");
print(row.toMap());
print(row.toMap());
//// print(row.rowsAssoc.first.assoc());
// for (var item in row.rowsAssoc) {
//   print(item.assoc());
// }
// for (final row in row.rowsAssoc) {
//   print(row.colAt(0));
//   print(row.colByName("nickname"));
//   print(row.assoc());
// }
// db.close();
Multi table query

Query Multi data , multi-table query

var res = await db.getAll(
  table: 'user tb1,upload tb2',
  fields: 'tb2.fileSize',
  where: 'tb2.id>0 and tb2.uid=tb1.id',
  debug: true,
);
print(res);
getOne

Query one data

var row = await db.getOne(
  table: 'table',
  fields: '*',
  //excludeFields: 'telphone,image',
  //group: 'name',
  //having: 'name',
  //order: 'id desc',
  //limit: 10,//10 or '10 ,100'
//   where: {
//     'email': 'xxx@google.com',
//     'id': ['between', '1,4'],
//     'email2': ['=', 'sss@google.com'],
//     'news_title': ['like', '%name%'],
//     'user_id': ['>', 1],
//     'user_id': ['<', 1],
//     'user_id': ['<>', 1],
//     'user_id': ['=', 1],
//     'email3': ['!=', 'sss@google.com'],
//     '_SQL': '(`isNet`=1 OR `isNet`=2)',
//   },
  //where:'`id`=1 AND name like "%jame%"',
);
print(row);
getAll

Query multiple data


var row = await db.getAll(
  table: 'table',
  fields: '*',
  //excludeFields: 'telphone,image',
  //group: 'name',
  //having: 'name',
  //order: 'id desc',
  //limit: 10,//10 or '10 ,100'
//   where: {
//     'email': 'xxx@google.com',
//     'id': ['between', '1,4'],
//     'email2': ['=', 'sss@google.com'],
//     'news_title': ['like', '%name%'],
//     'user_id': ['>', 1],
//     '_SQL': '(`isNet`=1 OR `isNet`=2)',
//   },
  //where:'`id`=1 AND name like "%jame%"',
);
print(row);
insert

Add a data, return lastInsertID.

await db.insert(
  table: 'table',
  debug: false,
  insertData: {
    'telphone': '+113888888888',
    'email': 'teenagex@dd.com',
    'blob_data':Uint8List.fromList([0x48, 0x65, 0x6c, 0x6c, 0x6f]),
    'json_data':'{"name": "MysqlUtils"}',
    'date_data': '2025-01-01',
    'create_time': 1620577162252,
    'update_time': 1620577162252,
  },
);
insertAll

Add multiple data, return affectedRows.

 await db.insertAll(
  table: 'table',
  debug: false,
  insertData: [
      {
        'telphone': '13888888888',
        'create_time': 1111111,
        'update_time': 12121212,
        'email': 'teenagex@dd.com'
      },
      {
        'telphone': '13881231238',
        'create_time': 324234,
        'update_time': 898981,
        'email': 'xxx@dd.com'
      }
]);

update

Update data

await db.update(
  table: 'table',
  updateData:{
    'telphone': '1231',
    'create_time': 12,
    'update_time': 12121212,
    'email': 'teenagex@dd.com',
    'view_count': ['inc', 1], //or ['+', 1], 
    'first_view': ['dec', 1]  //or ['-', 1], 
  },
  where:{
  'id':1,
});
// update table set telphone='1231',create_time=12,update_time=12121212,email='teenagex@dd.com',view_count=view_count+1,first_view=first_view-1 where id=1;
delete

Delete data

await db.delete(
  table:'table',
  where: {'id':1}
);
count

Statistical data

await db.count(
  table: 'table',
  fields: '*',
  //group: 'name',
  //having: 'name',
);
avg
await db.avg(
  table: 'table',
  fields: 'price',
  //group: 'name',
  //having: 'name',
);
min
await db.min(
  table: 'table',
  fields: 'price',
  //group: 'name',
  //having: 'name',
);
max
await db.max(
  table: 'table',
  fields: 'price',
  //group: 'name',
  //having: 'name',
);
Transaction

Transaction support, In case of exception, transaction will roll back automatically.

await db.startTrans();
await db.delete(table: 'user', where: {'id': 25}, debug: true);
//await db.delete(table: 'user1', where: {'id': 26}, debug: true);
await db.commit();
await db.close();
isConnectionAlive

Connection is open or closed

var isAlive = await db.isConnectionAlive();
if (isAlive) print('mysql is isAlive');
Test
dart test

所属分类

依赖

依赖清单 1 项

  • mysql_client_plus^0.1.3

源码仓库

使用此插件的项目

暂无相关数据。