Flutter 中集成SQLite查询的插件库hrana的使用
Flutter 中集成SQLite查询的插件库hrana的使用
hrana
是一个Dart实现的包,用于支持通过WebSockets暴露sqlite3数据库的libsql
服务器的Hrana协议。这个插件可以用来在Flutter应用中执行SQLite查询,提供了一种轻量级的数据存储解决方案。
开始使用
首先,你需要有一个可以连接的服务器。对于测试目的,你可以启动一个临时的sqld容器:
docker run -p 8080:8080 -ti -e SQLD_NODE=primary ghcr.io/tursodatabase/libsql-server:latest
使用方法
有了运行中的服务器,此包仅需要WebSocket URI即可连接,也可以选择性地提供JWT令牌进行授权:
import 'package:hrana/hrana.dart';
void main() async {
final database = await Database.connect(
Uri.parse('ws://localhost:8080/'),
jwtToken: null,
);
print(await database.withSession((session) async {
return await session.select('SELECT 1;');
}));
}
除了WebSockets之外,当使用http://
或https://
URL时,HTTP客户端也会被自动选择。
示例Demo
以下是一个完整的示例demo,展示了如何在Flutter应用中使用hrana
插件来执行简单的SQL查询:
import 'package:flutter/material.dart';
import 'package:hrana/hrana.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Hrana Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String queryResult = 'Query Result will appear here';
void _executeQuery() async {
try {
final database = await Database.connect(
Uri.parse('ws://localhost:8080/'),
jwtToken: null,
);
setState(() {
queryResult = 'connected!';
});
final result = await database.withSession((session) async {
return await session.select('SELECT 1;');
});
setState(() {
queryResult = result.toString();
});
await database.close();
} catch (e) {
setState(() {
queryResult = 'Error: $e';
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Hrana Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(queryResult),
SizedBox(height: 20),
ElevatedButton(
onPressed: _executeQuery,
child: Text('Execute Query'),
),
],
),
),
);
}
}
额外信息
目前,该包实现了执行语句和获取其结果作为行的功能。批次和存储语句也得到了支持,但尚未实现流式游标的支持。
贡献
欢迎贡献更多关于hrana协议的功能!如果需要重新运行protoc
编译器,首先运行:
$ dart pub global activate protoc_plugin
更多关于Flutter 中集成SQLite查询的插件库hrana的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html