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_namacreated_attables() 方法返回一个 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

1 回复

更多关于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 语句

如果你需要执行 INSERTUPDATEDELETE 等非查询 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.'),
        ),
      ),
    );
  }
}
回到顶部