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
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。
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);