Flutter数据库连接插件dart_odbc的使用
Flutter数据库连接插件dart_odbc的使用
dart_odbc
是一个用于与ODBC数据库交互的Dart包。它允许你在Dart应用程序中连接到ODBC数据源并直接执行SQL查询。
这个包受到由 Juan Mellado 开发的已弃用包 odbc
的启发。
使用方法
实例化ODBC类
通过提供ODBC驱动程序在主机上的路径来实例化ODBC类:
final odbc = DartOdbc(
dsn: '<your_dsn>',
pathToDriver: '<path_to_odbc_driver>',
);
DSN(可选)
DSN(数据源名称)是你在设置驱动程序管理器时给出的名称。更多信息可以查看 MySQL 文档。 如果没有提供DSN,只能通过连接字符串进行连接。
通过DSN连接到数据库
await odbc.connect(
username: 'db_username',
password: 'db_password',
);
通过连接字符串连接到数据库
await odbc.connectWithConnectionString(
"DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=C:\\Users\\Computer\\AppData\\Local\\Temp\\test.xlsx;",
);
执行SQL查询
final result = await odbc.execute("SELECT 10");
执行预编译语句
预编译语句可以防止SQL注入。
final List<Map<String, dynamic>> result = await odbc.execute(
'SELECT * FROM USERS WHERE UID = ?',
params: [1],
);
提供结果集列配置
抽象层DartOdbc
应该能够处理大多数查询的输出。但是,对于列大小非常长或数据类型不常见的查询,由于默认内存分配问题,可能会导致输出被破坏。可以通过在execute
方法的columnConfig
参数中提供ColumnType
来处理这些问题。
result = await odbc.execute(
'SELECT * FROM USERS WHERE UID = ?',
params: [1],
/// The column config can be provided as this.
/// But for most cases this config is not necessary
/// This is only needed when the data fetching is not working as expected
/// Only the columns with issues need to be provided
columnConfig: {
'NAME': ColumnType(size: 150),
'DESCRIPTION': ColumnType(type: SQL_C_WCHAR, size: 500),
},
);
结果将是一个包含Map
对象的Future<List<Map<String, dynamic>>>
,每个Map
代表一行。如果出现问题,将抛出ODBCException
异常。
获取表
final List<Map<String, String>> tables = await odbc.getTables();
断开数据库连接
最后,别忘了断开数据库连接并释放资源。
await odbc.disconnect();
直接访问ODBC驱动绑定
可以通过LibOdbc
类执行原生ODBC方法。
测试环境
该包已在以下数据库服务器上进行了测试:
- Microsoft SQL Server
- Oracle
支持其他数据库服务器
虽然未经过测试,但该插件应该适用于任何提供ODBC驱动程序的数据库。有关支持的数据库服务器的详细列表,请参阅官方 unixodbc 网站的“驱动程序”部分。
支持项目
大家好!我在兼顾学习和其他责任的同时积极维护这个项目。如果你觉得我的工作有用,并且希望帮助我继续改进这个项目,请考虑支持我!你的贡献将帮助我支付费用、买更多咖啡☕,并投入更多时间进行开发。🙏
每一点帮助都非常重要,我非常感谢你的支持。谢谢你们帮助我保持这个项目的运行!💛
示例代码
以下是完整的示例代码:
import 'package:dart_odbc/dart_odbc.dart';
import 'package:dotenv/dotenv.dart';
void main(List<String> args) {
run(args);
}
Future<void> run(List<String> args) async {
// 加载环境变量
final DotEnv env = DotEnv()..load(['.env']);
// 数据库用户名
final username = env['USERNAME'];
// 数据库密码
final password = env['PASSWORD'];
final dsn = env['DSN'];
// 可选选择数据库
final db = env['DATABASE'];
final odbc = DartOdbc(dsn: dsn);
await odbc.connect(username: username!, password: password!);
if (db != null) {
await odbc.execute('USE $db');
}
List<Map<String, dynamic>> result = await odbc.execute(
args[0], // SQL 查询
params: args.sublist(1), // SQL 查询参数
columnConfig: {
"COL1": ColumnType(size: 100),
},
);
print(result);
// 断开数据库连接
await odbc.disconnect();
}
更多关于Flutter数据库连接插件dart_odbc的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库连接插件dart_odbc的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用dart_odbc
插件来连接数据库并不是常见的做法,因为dart_odbc
主要是为Dart VM设计的,并不直接支持Flutter(尤其是Flutter的移动端平台,如iOS和Android)。不过,为了说明如何使用dart_odbc
(假设在支持Dart VM的环境中,比如服务器端的Dart应用),这里提供一个基本的代码案例。
请注意,以下代码示例不适用于Flutter的移动端开发。对于Flutter中的数据库操作,通常会使用如sqflite
这样的插件来处理SQLite数据库。
Dart VM 环境下的 dart_odbc
使用示例
首先,确保你的pubspec.yaml
文件中包含了dart_odbc
的依赖:
dependencies:
dart_odbc: ^any_version_you_want_to_use
然后,运行flutter pub get
(在Dart VM环境下,这可能是dart pub get
)来安装依赖。
以下是一个简单的示例,展示如何使用dart_odbc
连接到数据库并执行查询:
import 'package:dart_odbc/dart_odbc.dart';
void main() async {
// 配置ODBC连接字符串
String connectionString = 'DRIVER={SQL Server};SERVER=your_server_address;DATABASE=your_database_name;UID=your_username;PWD=your_password;';
// 创建ODBC连接
OdbcConnection connection = OdbcConnection(connectionString);
try {
// 打开连接
await connection.open();
print('Connection opened successfully.');
// 创建SQL查询
String sql = 'SELECT * FROM your_table_name';
// 执行查询
OdbcResultSet resultSet = await connection.executeQuery(sql);
// 处理结果集
while (await resultSet.next()) {
// 假设你的表有一个名为`column_name`的列
String value = resultSet.getString('column_name');
print('Value: $value');
}
// 关闭结果集
await resultSet.close();
} catch (e) {
print('Error: $e');
} finally {
// 确保连接被关闭
if (connection.isOpen) {
await connection.close();
print('Connection closed.');
}
}
}
注意事项
- 环境限制:上述代码适用于Dart VM环境,不适用于Flutter移动端开发。
- 依赖项:确保你的系统上已正确安装了ODBC驱动程序,并且
dart_odbc
插件与你的Dart版本兼容。 - 安全性:在实际应用中,避免在代码中硬编码数据库凭据。考虑使用环境变量或安全的凭据存储服务。
- 错误处理:示例中包含了基本的错误处理,但在生产环境中,你可能需要更详细的日志记录和错误处理机制。
对于Flutter应用,如果需要使用数据库,建议使用专为Flutter设计的插件,如sqflite
,它提供了对SQLite数据库的支持,并且与Flutter的移动端平台兼容。