Flutter使用postgres:^3.2.1实现PostgreSQL增删改查询求助
基于postgres ^3.2.1的Flutter数据库增删改实现
1. 依赖配置
在项目的pubspec.yaml中添加最新版依赖:
dependencies: postgres: ^3.2.1
2. 初始化数据库连接
新版本废弃了PostgreSQLConnection,改用PgPool(连接池,推荐)或PgConnection(单连接)管理数据库连接:
import 'package:postgres/postgres.dart'; // 初始化连接池 final PgPool pool = PgPool( PgEndpoint( host: '你的数据库地址', port: 5432, // 默认PostgreSQL端口 database: '数据库名称', username: '用户名', password: '密码', ), settings: const PgPoolSettings( maxConnections: 5, // 配置最大连接数 ), ); // 程序结束时关闭连接池释放资源 // await pool.close();
3. 插入操作
使用execute方法执行插入SQL,通过parameters传递参数(占位符用$1、$2按顺序对应):
Future<void> insertUser(String name, int age) async { try { await pool.execute( 'INSERT INTO users (name, age) VALUES ($1, $2)', parameters: [name, age], ); print('插入成功'); } catch (e) { print('插入失败: $e'); } }
4. 更新操作
同样通过execute执行更新SQL,可通过返回结果的affectedRows判断是否成功修改数据:
Future<void> updateUser(int userId, String newName) async { try { final PgResult result = await pool.execute( 'UPDATE users SET name = $1 WHERE id = $2', parameters: [newName, userId], ); if (result.affectedRows > 0) { print('更新成功,影响行数: ${result.affectedRows}'); } else { print('未找到ID为$userId的用户'); } } catch (e) { print('更新失败: $e'); } }
5. 删除操作
执行删除SQL,同样通过affectedRows验证删除结果:
Future<void> deleteUser(int userId) async { try { final PgResult result = await pool.execute( 'DELETE FROM users WHERE id = $1', parameters: [userId], ); if (result.affectedRows > 0) { print('删除成功,影响行数: ${result.affectedRows}'); } else { print('未找到ID为$userId的用户'); } } catch (e) { print('删除失败: $e'); } }
关键注意事项
- 新版本已移除
substitutionValues,统一使用位置占位符$1、$2配合parameters列表传参 - 优先使用
PgPool管理连接,避免频繁创建/销毁连接带来的性能损耗 - 必须捕获SQL执行过程中的异常,包括连接失败、语法错误、约束冲突等
- 若需执行查询操作,可使用
pool.query方法,返回PgResult用于遍历获取数据
内容的提问来源于stack exchange,提问作者Ismail Ibrahim
相关产品推荐
相关产品推荐

