Flutter for OpenHarmony:postgres 直连 PostgreSQL 数据库,实现 Dart 原生的高效读写(数据库驱动) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:postgres 直连 PostgreSQL 数据库,实现 Dart 原生的高效读写(数据库驱动) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net

请添加图片描述

前言

虽然移动应用大多使用本地数据库(如 SQLite),但在某些特定场景,比如内部企业应用、数据看板,或者 Serverless 架构中,客户端直接连接远程数据库进行即时查询是非常便捷的。

postgres 是一个纯 Dart 实现的 PostgreSQL 驱动,拥有完整的协议支持,不需要任何原生库绑定(JNI/FFI)。这意味着它不仅能在服务器端(Dart VM)运行完美,同样也能在 Flutter 移动端及 Web 端流畅运行,当然也包括 OpenHarmony。

一、核心特性

  • 纯 Dart 实现:零原生依赖,全平台通用。
  • SSL/TLS 安全连接:保障数据传输安全。
  • 流式查询:支持大结果集的流式读取,避免 OOM。
  • 连接池:内置连接池管理,适应高并发场景。

通过 TCP/SSL 连接

PostgreSQL 协议交互

执行 SQL 语句

底层查询

原始结果集

映射后的 Dart 对象

OpenHarmony 应用

远程数据库服务器

内置连接池

数据库实例

Flutter 组件渲染

二、集成与配置

2.1 添加依赖

dependencies:postgres: ^3.5.9 

2.2 连接配置 (SSLMode)

在公网环境连接数据库,强烈建议开启 SSL。

import'package:postgres/postgres.dart';final endpoint =Endpoint( host:'db.example.com', port:5432, database:'my_db', username:'user', password:'password',);final connection =awaitConnection.open( endpoint, settings:ConnectionSettings( sslMode:SslMode.require,// 强制 SSL),);
在这里插入图片描述

三、核心操作与示例

3.1 示例一:执行简单查询

查询用户列表并将结果映射为 Dart 对象。

Future<void>queryUsers()async{// 假设已有 connectionfinal result =await connection.execute('SELECT id, name FROM users WHERE active = @active', parameters:{'active':true},);for(final row in result){print('User: ${row[0]} - ${row[1]}');}}
在这里插入图片描述

3.2 示例二:事务处理

转账操作必须在事务中完成。

Future<void>transferMoney(int fromId, int toId, double amount)async{await connection.runTx((session)async{// 1. 扣款await session.execute('UPDATE accounts SET balance = balance - @amount WHERE id = @from', parameters:{'amount': amount,'from': fromId},);// 2. 加款await session.execute('UPDATE accounts SET balance = balance + @amount WHERE id = @to', parameters:{'amount': amount,'to': toId},);// 如果抛异常,自动回滚});}
在这里插入图片描述

3.3 示例三:监听数据库通知 (LISTEN/NOTIFY)

PostgreSQL 有个超酷的功能:发布订阅。App 可以实时收到数据库变更通知。

Future<void>listenChanges()async{// 建立专用连接用于监听final conn =awaitConnection.open(endpoint);// 订阅频道 'user_updates'await conn.execute("LISTEN user_updates");// 监听通知流 conn.channels['user_updates']?.listen((payload){print('收到数据库通知: $payload');// 刷新 UI});}
在这里插入图片描述

四、OpenHarmony 平台适配

4.1 网络权限

连接远程数据库必须声明网络权限。

"requestPermissions":[{"name":"ohos.permission.INTERNET"}]

4.2 安全与证书

如果在内网且自签名证书,需要在连接时添加受信任的根证书。postgres 库允许通过 SecurityContext 自定义证书验证逻辑。

五、完整实战示例:实时数据看板

本示例将连接一个远程 PostgreSQL 数据库,并展示实时更新的销售数据。每当有新订单插入时(通过 LISTEN/NOTIFY),看板自动刷新。

5.1 示例代码

import'dart:async';import'package:flutter/material.dart';import'package:postgres/postgres.dart';voidmain(){runApp(constMaterialApp(home:DashboardPage()));}classDashboardPageextendsStatefulWidget{constDashboardPage({super.key});@overrideState<DashboardPage>createState()=>_DashboardPageState();}class _DashboardPageState extendsState<DashboardPage>{Connection? _conn;List<Map<String,dynamic>> _salesData =[]; bool _connecting =true;String _error ='';@overridevoidinitState(){super.initState();_connectDB();}Future<void>_connectDB()async{try{// ⚠️ 真实项目中不要硬编码密码!应通过安全方式获取final endpoint =Endpoint( host:'192.168.1.100',// 替换为你的服务器 IP port:5432, database:'sales_db', username:'flutter_app', password:'secure_password',); _conn =awaitConnection.open(endpoint, settings:ConnectionSettings(sslMode:SslMode.disable));// 订阅实时更新await _conn!.execute("LISTEN new_sale"); _conn!.channels['new_sale']?.listen((_)=>_refreshData());await_refreshData();// 初始加载setState((){ _connecting =false; _error ='';});}catch(e){setState((){ _connecting =false; _error ='连接失败: $e';});}}Future<void>_refreshData()async{if(_conn ==null)return;try{final result =await _conn!.execute('SELECT product, amount, created_at FROM sales ORDER BY created_at DESC LIMIT 20');final data = result.map((row)=>{'product': row[0]asString,'amount': row[1]as double,'time': row[2]asDateTime,}).toList();if(mounted){setState(()=> _salesData = data);}}catch(e){print('查询失败: $e');}}@overridevoiddispose(){ _conn?.close();super.dispose();}@overrideWidgetbuild(BuildContext context){returnScaffold( appBar:AppBar(title:constText('实时销售看板')), body: _connecting ?constCenter(child:CircularProgressIndicator()): _error.isNotEmpty ?Center(child:Text(_error, style:constTextStyle(color:Colors.red))):RefreshIndicator( onRefresh: _refreshData, child:ListView.builder( itemCount: _salesData.length, itemBuilder:(context, index){final item = _salesData[index];returnListTile( leading:constIcon(Icons.shopping_cart), title:Text(item['product']), subtitle:Text(item['time'].toString().substring(11,19)), trailing:Text('¥${item['amount']}', style:constTextStyle(fontWeight:FontWeight.bold, fontSize:16, color:Colors.green),),);},),), floatingActionButton:FloatingActionButton( tooltip:'模拟下单', child:constIcon(Icons.add), onPressed:(){// 仅用于演示:客户端插入一条数据触发通知 _conn?.execute("INSERT INTO sales (product, amount) VALUES ('OpenHarmony Device', 999.0); NOTIFY new_sale;");},),);}}
在这里插入图片描述

六、总结

在 OpenHarmony 上通过 postgres 库直连数据库,为开发者提供了极大的灵活性,尤其适合快速原型开发、内部工具以及实时性要求极高的场景。

最佳实践

  1. 安全性:不要把生产环境数据库端口直接暴露在公网,建议配合 VPN 或 SSH 隧道使用,或者至少限制 IP 白名单。
  2. 连接池:虽然库内置了连接池,但移动端资源有限,应谨慎开启过多连接。通常一个长连接用于监听,短连接按需使用。
  3. 架构设计:对于大型 C 端应用,仍建议通过 HTTP API 访问数据,直连仅限特定后端或管理端场景。

Read more

7 款 AI 提示词 Prompt 生成器网站推荐,高手专用工具库!

7 款 AI 提示词 Prompt 生成器网站推荐,高手专用工具库!

随着AI技术浪潮席卷而来,不少创作者都会被功能强大的AI工具所吸引,进而主动探索学习与应用。熟练驾驭各类AI工具,的确能够为工作和创作注入全新活力,显著提升效率。 然而,对于零基础的AI新手而言,撰写提示词往往是一大难关。即便反复调试,也难以达到网络达人那般出色的创作水准。事实上,掌握优质提示词的撰写技巧,正是缩小与高手差距的关键所在。 值得一提的是,提示词的创作也可以借助AI完成,毕竟AI对自身运作逻辑有着天然的理解优势。接下来,为大家精心推荐7款实用的AI提示词生成工具,助力各位开启AI创作的全新旅程。 1、ChatArt ChatArt 是一个包罗万象的人工智能创作平台,利用当今最先进的人工智能模型(Deepseek, GPT-o1、Claude 3.5 和 Gemini)的力量。您可以轻松地将简单的文字转化为高质量的对话、文章、创作和绘画。 功能一览 * AI 写作:提供 100+写作创意,应用于社交媒体,写作,电子商务等多个场景,帮您生成,检查,优化,重写您的内容。 * 文章

By Ne0inhk
2026最新秋叶绘世Stable Diffusion整合包下载 秋叶ComfyUI整合包下载 ai生图必备 绘世启动器.exe 绘世2.8.13下载 绘世启动器2.8.13下载地址

2026最新秋叶绘世Stable Diffusion整合包下载 秋叶ComfyUI整合包下载 ai生图必备 绘世启动器.exe 绘世2.8.13下载 绘世启动器2.8.13下载地址

2026最新秋叶绘世Stable Diffusion整合包下载 秋叶ComfyUI整合包下载 ai生图必备 绘世启动器.exe 绘世2.8.13下载 绘世启动器2.8.13下载地址 绘世2.8.13下载 | 绘世2.8.12下载 | 绘世启动器2.8.13下载地址 秋叶绘世Stable Diffusion整合包 【下载链接】 https://pan.quark.cn/s/41f42720f1c7?pwd=ZhBP 链接:https://pan.quark.cn/s/41f42720f1c7?pwd=ZhBP 提取码:ZhBP 解压密码:bilibili-秋葉aaaki 一定要用网盘官方客户端下载,否则压缩包极有可能损坏无法解压。下载完毕一定要先测试压缩包是否完好再解压!!! 秋叶ComfyUI整合包 绘世启动器.

By Ne0inhk

Windows纯本地部署OpenClaude:从零搭建你的7×24小时AI助理,打通微信/飞书

无需云服务器,一台Windows电脑就能让AI助手24小时在线,还能通过手机随时指挥它干活 前言 之前写过一篇用云服务器部署OpenClaude的教程,不少读者反馈:“一定要买服务器吗?我只有一台Windows电脑行不行?” 答案是:当然可以! OpenClaude本来就是完全支持本地部署的开源AI助手框架。你只需要一台Windows电脑,就能跑起一个完整的AI服务,而且可以通过微信、飞书随时随地指挥它——查文件、开软件、管理电脑,甚至让它在你睡觉的时候帮你处理任务。 这篇文章将手把手教你在Windows环境纯本地部署OpenClaude,并打通飞书和企业微信,全程不需要买云服务器。 一、先搞懂:三种部署方式,你选哪个? OpenClaude支持三种部署模式,先看这张图快速理解区别: 部署方式架构优点缺点本地部署全在本地电脑无需服务器、免费、隐私安全电脑关机AI就下线云端部署全在云服务器7×24小时在线、稳定需要付费买服务器混合部署云端大脑+本地手脚24小时在线+能操作本地电脑架构复杂、需要两台机器 本文选择第一种:纯本地部署。虽然电脑关机时AI会下线,但

By Ne0inhk

我用百度智能云跑OpenClaw,AI帮我24小时盯盘、找黑马

OpenClaw(也就是Clawdbot)爆火,成为2026年现象级AI应用,被业界认为是Agent今后的主要发展方向。简单来说,它是一个能够自己操作电脑干活的智能体,你只需要通过聊天工具给他发指令,它就会自动规划和执行任务。 一位博主给了OpenClaw 50美元,让它自生自灭,结果AI通过高频捕捉套利机会,在交易当中获利,仅48小时之内将50美元滚到了2980美元。 这个案例给了我启发:何不让OpenClaw来帮我赚钱,给他操盘思路,复现一个AI炒股大神,并且让大多数人都能轻松抄作业。 于是我开始尝试,首先要搞定OpenClaw的部署,我推荐使用云主机的部署方式,国内各家科技公司都提供了OpenClaw接入服务,下面以百度智能云为例,简单说下部署的过程。 01 百度智能云:轻松部署,极简交互 打开百度智能云官网,现在每天开放 500 个名额,可以一分钱开通,快抢福利吧: https://cloud.baidu.com/product/BCC/moltbot.html 确认订单、完成支付后,就可以准备安装和配置了。

By Ne0inhk