Flutter数据库查询插件sql_query的使用
Flutter数据库查询插件sql_query的使用
在本示例中,我们将展示如何使用 sql_query
插件来初始化数据库,并执行一些基本的查询操作。我们将会创建一个简单的 Flutter 应用程序,该应用程序包含一个数据库表,并能够进行数据的增删改查。
初始化数据库
首先,我们需要初始化数据库。在 main.dart
文件中,我们可以看到如何初始化数据库:
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:sql_query/query.dart';
import 'package:sql_query_example/produk.dart';
import 'package:sql_query_example/customer.dart';
import 'package:sql_query_example/produk2.dart';
import 'package:sql_query_example/satuan.dart';
final navigatorKey = GlobalKey<NavigatorState>();
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await DB.init(
databaseName: 'testings',
customPath: '',
tableList: [
Produk.tables(),
Produk2.tables(),
Satuan.tables(),
Customer.tables(),
],
);
// await Merger.init();
runApp(const MyApp());
}
在上述代码中,我们通过调用 DB.init()
方法来初始化数据库。我们指定了数据库名称为 testings
,并且传递了一个包含所有表定义的列表。
表定义
接下来,我们定义一个表 Produk
,并在其中添加一些列。以下是 Produk
类的定义:
class Produk {
static const table = 'produk';
static const id = 'id';
static const pNama = 'p_nama';
static const createdAt = 'created_at';
static final column = [
ColumnDatabase(name: id, typeData: DataType.integer, primaryKey: true, autoIncrement: true),
ColumnDatabase(name: pNama, typeData: DataType.text),
ColumnDatabase(name: createdAt, typeData: DataType.double),
];
static tables() {
return TableDatabase(
tableName: table,
column: column,
);
}
static get() async {
final gt = DB.table(table);
gt.where(createdAt, '<=', DateTime.now().millisecondsSinceEpoch.toString());
return await gt.get();
}
}
在这个类中,我们定义了表格名 produk
和三列:id
(主键且自动递增)、p_nama
和 created_at
。tables()
方法返回一个 TableDatabase
对象,用于表示这个表的结构。
执行查询
现在我们可以在应用启动时执行查询。在 MyApp
类的 initState
方法中,我们添加了一些查询逻辑:
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
Future.delayed(Duration.zero, () async {
// await Produk.add();
// print(await Produk.get());
SQL.view(isFirst: true, context: navigatorKey.currentContext!);
});
initPlatformState();
}
// Platform messages are asynchronous, so we initialize in an async method.
Future<void> initPlatformState() async {}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
navigatorKey: navigatorKey,
home: const Scaffold(),
);
}
}
更多关于Flutter数据库查询插件sql_query的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库查询插件sql_query的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
sql_query
是一个用于在 Flutter 应用中执行原生 SQL 查询的插件。它允许你直接编写 SQL 语句来查询数据库,而不需要使用 Flutter 的 SQLite 包装器(如 sqflite
)。这对于需要执行复杂查询或需要直接控制 SQL 语句的场景非常有用。
安装 sql_query
插件
首先,你需要在 pubspec.yaml
文件中添加 sql_query
插件的依赖:
dependencies:
flutter:
sdk: flutter
sql_query: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
使用 sql_query
插件
1. 初始化数据库
在使用 sql_query
之前,你需要初始化数据库。你可以使用 sql_query
提供的 SQLDatabase
类来打开或创建数据库。
import 'package:sql_query/sql_query.dart';
final db = SQLDatabase('my_database.db');
await db.open();
2. 执行 SQL 查询
你可以使用 executeQuery
方法来执行 SQL 查询。该方法返回一个 List<Map<String, dynamic>>
,其中每个 Map
代表一行数据,键是列名,值是对应的数据。
final result = await db.executeQuery('SELECT * FROM my_table');
print(result); // 打印查询结果
3. 执行非查询 SQL 语句
如果你需要执行 INSERT
、UPDATE
或 DELETE
等非查询 SQL 语句,可以使用 execute
方法。
await db.execute('INSERT INTO my_table (column1, column2) VALUES (?, ?)', ['value1', 'value2']);
4. 关闭数据库
在不再需要数据库连接时,记得关闭数据库以释放资源。
await db.close();
完整示例
以下是一个完整的示例,展示了如何使用 sql_query
插件来执行 SQL 查询和操作:
import 'package:flutter/material.dart';
import 'package:sql_query/sql_query.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final db = SQLDatabase('my_database.db');
await db.open();
// 创建表
await db.execute('''
CREATE TABLE IF NOT EXISTS my_table (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
''');
// 插入数据
await db.execute('INSERT INTO my_table (name, age) VALUES (?, ?)', ['Alice', 30]);
await db.execute('INSERT INTO my_table (name, age) VALUES (?, ?)', ['Bob', 25]);
// 查询数据
final result = await db.executeQuery('SELECT * FROM my_table');
print(result);
// 关闭数据库
await db.close();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('SQL Query Example'),
),
body: Center(
child: Text('Check the console for SQL query results.'),
),
),
);
}
}