Flutter数据库操作插件sql_utilities的使用
Flutter数据库操作插件sql_utilities的使用
使用
var someUserSuppliedValue = 'littlebobbytables';
var boundParams = {};
var sql = 'SELECT * FROM foo WHERE ' + PostgresUtils.bindEquals('field1', someUserSuppliedValue, boundParams) + ' ORDER BY field2 ASC';
上述代码将生成:
sql
:SELECT * FROM foo WHERE field1 = @0 ORDER BY field2 ASC
boundParams
:{0: 'littlebobbytables'}
你也可以显式命名绑定参数,并在查询中重复使用它:
var someUserSuppliedValue = 'littlebobbytables';
var boundParams = {};
var sql = 'SELECT * FROM foo WHERE ' + PostgresUtils.bindEquals('field1', someUserSuppliedValue, boundParams, name: 'customName') + ' OR field2 = @customName';
这将生成:
sql
:SELECT * FROM foo WHERE field1 = @customName OR field2 = @customName
boundParams
:{'customName': 'littlebobbytables'}
还可以使用如bindContains()
、bindStartsWithAny()
和bindRegex()
等方法来生成复杂的匹配语句:
var startingValues = ['lorem', 'ipsum', 'dolor'];
var endingValues = ['sit', 'amet', 'consectetur'];
var boundParams = {};
var sql = 'SELECT * FROM foo WHERE ' + PostgresUtils.andGroup([
PostgresUtils.bindStartsWithAny('field1', startingValues, boundParams),
PostgresUtils.bindEndsWithAny('field2', endingValues, boundParams),
PostgresUtils.bindRegex('field3', RegExp(r'yourpatternhere', caseSensitive: true, multiLine: true), boundParams, name: 'matchPattern'),
]);
这将生成:
-
sql
:SELECT * FROM foo WHERE ( (field1 LIKE @0 OR field1 LIKE @1 OR field1 LIKE @2) AND (field2 LIKE @3 OR field2 LIKE @4 OR field2 LIKE @5) AND field3 REGEXP(@matchPattern, im) )
-
boundParams
:{ '0' : 'lorem%', '1' : 'ipsum%', '2' : 'dolor%', '3' : '%sit', '4' : '%amet', '5' : '%consectetur', 'matchPattern': 'yourpatternhere' }
支持的方言
- MySQL
- PostgreSQL
可用的方法
inClause()
bindInClause()
bindParam()
bindParams()
bindInsertValuesMap()
bindUpdateValuesMap()
bindGreaterThan()
bindGreaterThanOrEqual()
bindLessThan()
bindLessThanOrEqual()
bindEquals()
bindContains()
bindStartsWith()
bindEndsWith()
bindRegex()
bindEqualsAny()
bindContainsAny()
bindStartsWithAny()
bindEndsWithAny()
bindRegexAny()
orGroup()
andGroup()
特性和问题
目前,请通过电子邮件向作者提交功能请求和错误报告。
完整示例代码
// 忽略未使用的局部变量
import 'dart:convert';
import 'package:sql_utilities/sql_utilities.dart';
void main() {
var startingValues = ['lorem', 'ipsum', 'dolor'];
var endingValues = ['sit', 'amet', 'consectetur'];
Map<String, dynamic> boundParams = {};
var sql = 'SELECT * FROM foo WHERE ' + PostgresUtils.andGroup([
PostgresUtils.bindStartsWithAny('field1', startingValues, boundParams),
PostgresUtils.bindEndsWithAny('field2', endingValues, boundParams),
PostgresUtils.bindRegex('field3', RegExp(r'yourpatternhere', caseSensitive: false, multiLine: true), boundParams, name: 'matchPattern'),
]);
print(JsonEncoder.withIndent(' ').convert({
'sql' : sql,
'boundParams': boundParams,
}));
// 现在只需将你的sql和boundParams传递给orm/连接库
// 例如:
// var results = await myConnection.query(sql, boundParams);
}
更多关于Flutter数据库操作插件sql_utilities的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复