Flutter SQLite数据库管理插件quantum_sqlite的使用
Flutter SQLite数据库管理插件quantum_sqlite的使用
quantum
对SQLite进行包装,以支持中文全文搜索。
以下是一个完整的示例代码,展示了如何在Flutter应用中使用quantum_sqlite
插件来管理SQLite数据库。
示例代码
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:quantum_sqlite/quantum_sqlite.dart';
import 'package:sqlite3/sqlite3.dart' hide Row;
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final db = sqlite3.openInMemory(); // 打开内存中的SQLite数据库
final TextEditingController _controller = TextEditingController();
String _platformVersion = 'Unknown'; // 平台版本信息
bool _enableJieBa = false; // 是否启用结巴分词
String? _dashboard; // 搜索结果展示
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
db.loadSimpleExtension(); // 加载简单扩展
// 创建虚拟表t1,并指定使用fts5进行全文搜索
db.execute("CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = 'simple')");
// 插入一些数据
db.execute(
"""
insert into t1(x) values
('周杰伦 Jay Chou:我已分不清,你是友情还是错过的爱情'),
('周杰伦 Jay Chou:最美的不是下雨天,是曾与你躲过雨的屋檐'),
('I love China! 我爱中国!我是中华人民共和国公民!'),
('@English &special _characters."''bacon-&and''-eggs%'),
('政府は30日、世界文化遺産への登録を目指す「富士山」(山梨県、静岡県)について、国連教育科学文化機関(ユネスコ)の諮問機関から登録を求める勧告が出たと発表した。構成資産の一つ、三保松原(静岡市)の除外が条件。ユネスコが6月にカンボジアで開く世界遺産委員会が最終決定する。勧告が覆った例は少なく、登録されれば国内で17件目の世界遺産になる。'),
('서는 안될 정도로 꼭 요긴한 것들 만일까? 살펴볼수록 없어도 좋을 만한 것들이 적지 않다.')
""");
}
// 初始化平台状态
Future<void> initPlatformState() async {
String platformVersion;
// 获取平台版本信息
try {
platformVersion =
await Quantum.platformVersion ?? 'Unknown platform version';
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
// 如果组件被移除,则不更新UI
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Column(children: [
SizedBox(
child: Text('Running on: $_platformVersion\n'),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 16),
child: TextField(controller: _controller),
),
SwitchListTile(
value: _enableJieBa,
onChanged: (value) {
setState(() {
_enableJieBa = value;
});
},
title: const Text('启用结巴分词'),
),
SizedBox(
child: TextButton(
child: const Text('搜索'),
onPressed: () async {
final queryType =
_enableJieBa ? 'jieba_query' : 'simple_query';
// 执行查询
final ret = db.select(
"select rowid as id, simple_highlight(t1, 0, '[', ']')"
" as info from t1 where x match $queryType(?)",
[_controller.text]);
setState(() {
_dashboard = ret.toString();
});
})),
if (_dashboard != null)
Padding(
padding: const EdgeInsets.symmetric(vertical: 16),
child: Text(
_dashboard!,
style: const TextStyle(fontSize: 20),
),
),
])),
);
}
}
代码说明
-
导入必要的库:
import 'package:flutter/material.dart'; import 'dart:async'; import 'package:flutter/services.dart'; import 'package:quantum_sqlite/quantum_sqlite.dart'; import 'package:sqlite3/sqlite3.dart' hide Row;
-
创建主应用类
MyApp
:class MyApp extends StatefulWidget { const MyApp({Key? key}) : super(key: key); [@override](/user/override) State<MyApp> createState() => _MyAppState(); }
-
初始化数据库和文本控制器:
class _MyAppState extends State<MyApp> { final db = sqlite3.openInMemory(); final TextEditingController _controller = TextEditingController(); String _platformVersion = 'Unknown'; bool _enableJieBa = false; String? _dashboard;
-
初始化平台状态并创建虚拟表:
[@override](/user/override) void initState() { super.initState(); initPlatformState(); db.loadSimpleExtension(); db.execute("CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = 'simple')"); db.execute(...); }
-
异步初始化平台状态:
Future<void> initPlatformState() async { String platformVersion; try { platformVersion = await Quantum.platformVersion ?? 'Unknown platform version'; } on PlatformException { platformVersion = 'Failed to get platform version.'; } if (!mounted) return; setState(() { _platformVersion = platformVersion; }); }
-
构建UI:
[@override](/user/override) Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: const Text('Plugin example app'), ), body: Column(children: [ SizedBox( child: Text('Running on: $_platformVersion\n'), ), Padding( padding: const EdgeInsets.symmetric(vertical: 16), child: TextField(controller: _controller), ), SwitchListTile( value: _enableJieBa, onChanged: (value) { setState(() { _enableJieBa = value; }); }, title: const Text('启用结巴分词'), ), SizedBox( child: TextButton( child: const Text('搜索'), onPressed: () async { final queryType = _enableJieBa ? 'jieba_query' : 'simple_query'; final ret = db.select( "select rowid as id, simple_highlight(t1, 0, '[', ']') as info from t1 where x match $queryType(?)", [_controller.text]); setState(() { _dashboard = ret.toString(); }); }), ), if (_dashboard != null) Padding( padding: const EdgeInsets.symmetric(vertical: 16), child: Text( _dashboard!, style: const TextStyle(fontSize: 20), ), ), ])), ); }
更多关于Flutter SQLite数据库管理插件quantum_sqlite的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter SQLite数据库管理插件quantum_sqlite的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
quantum_sqlite
是一个用于 Flutter 的 SQLite 数据库管理插件,它提供了简单易用的 API 来操作 SQLite 数据库。以下是如何使用 quantum_sqlite
插件的基本步骤。
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 quantum_sqlite
依赖:
dependencies:
flutter:
sdk: flutter
quantum_sqlite: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化数据库
在使用 quantum_sqlite
之前,你需要初始化数据库。通常,你可以在应用的 main
函数中完成这个操作。
import 'package:quantum_sqlite/quantum_sqlite.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化数据库
await QuantumSqlite.initialize('my_database.db');
runApp(MyApp());
}
3. 创建表
你可以使用 QuantumSqlite.execute
方法来执行 SQL 语句来创建表。
Future<void> createTable() async {
await QuantumSqlite.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
''');
}
4. 插入数据
使用 QuantumSqlite.insert
方法插入数据。
Future<void> insertUser() async {
await QuantumSqlite.insert('users', {
'name': 'John Doe',
'age': 30,
});
}
5. 查询数据
使用 QuantumSqlite.query
方法查询数据。
Future<List<Map<String, dynamic>>> getUsers() async {
return await QuantumSqlite.query('users');
}
6. 更新数据
使用 QuantumSqlite.update
方法更新数据。
Future<void> updateUser(int id) async {
await QuantumSqlite.update('users', {
'name': 'Jane Doe',
'age': 25,
}, where: 'id = ?', whereArgs: [id]);
}
7. 删除数据
使用 QuantumSqlite.delete
方法删除数据。
Future<void> deleteUser(int id) async {
await QuantumSqlite.delete('users', where: 'id = ?', whereArgs: [id]);
}
8. 关闭数据库
在应用关闭时,记得关闭数据库连接。
Future<void> closeDatabase() async {
await QuantumSqlite.close();
}
9. 完整示例
以下是一个完整的示例,展示了如何使用 quantum_sqlite
进行基本的数据库操作。
import 'package:flutter/material.dart';
import 'package:quantum_sqlite/quantum_sqlite.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化数据库
await QuantumSqlite.initialize('my_database.db');
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
[@override](/user/override)
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
[@override](/user/override)
void initState() {
super.initState();
_initializeDatabase();
}
Future<void> _initializeDatabase() async {
await createTable();
await insertUser();
List<Map<String, dynamic>> users = await getUsers();
print(users);
}
Future<void> createTable() async {
await QuantumSqlite.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
''');
}
Future<void> insertUser() async {
await QuantumSqlite.insert('users', {
'name': 'John Doe',
'age': 30,
});
}
Future<List<Map<String, dynamic>>> getUsers() async {
return await QuantumSqlite.query('users');
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Quantum SQLite Example'),
),
body: Center(
child: Text('Check the console for database output.'),
),
);
}
}