Package selection guidance compiled from public package information, community data, and project usage.
mysql_utils is a helper library for mysql_client_plus that simplifies MySQL database interactions in Flutter applications. It provides streamlined methods for connecting to MySQL databases, executing queries, and handling results with minimal boilerplate. Designed to enhance developer productivity, it abstracts common operations while maintaining compatibility across multiple platforms including Android, iOS, macOS, Windows, and Linux. The package is ideal for projects requiring reliable and straightforward MySQL integration without complex setup.
Use cases
Simple MySQL query execution
Database connection management
Cross-platform database access
Streamlined CRUD operations
Integration with mysql_client_plus
Key features
Easy-to-use query interface
Built on mysql_client_plus
Supports all major desktop and mobile platforms
Reduces boilerplate code
Automatic result parsing
Suitable for
Flutter apps needing MySQL connectivity
Developers seeking simple database helpers
Projects using mysql_client_plus
Backend services with MySQL databases
Rapid prototyping with databases
Considerations
Requires mysql_client_plus as a dependency
Limited to MySQL databases
Not suitable for complex SQL transactions
No built-in migration support
Dependent on external MySQL server availability
Original README
Original README snapshot from the linked source repository. Visit the repository for the latest content.
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);