Flutter数据库管理插件iw_database的使用

Flutter数据库管理插件iw_database的使用

本项目是一个封装数据库客户端使用的实现。其主要目标是创建一个包,提供一个封装好的数据库客户端,这样开发者可以在多个应用中使用它,而不是为每个项目创建自己的封装。

目前,该包仅支持MySQL,但未来可能会支持其他数据库客户端。

使用方法

以下示例展示了如何使用支持的MySQL方法进行SQL请求,并处理数据库异常。

你也可以阅读单元测试以了解该实现支持的所有可能性。

import 'dart:io';

import 'package:iw_database/iw_database.dart';

Future<void> main() async {
  try {
    // 定义数据库连接属性
    final DatabaseProperties properties = DatabaseProperties(
      host: 'localhost', // 数据库主机地址
      port: 3306, // 数据库端口
      name: 'tests', // 数据库名称
      username: 'root', // 数据库用户名
      password: 'wrah-baft-krup-cex-TEEH', // 数据库密码
      secure: false, // 是否使用安全连接
    );

    // 创建MySQL数据库客户端服务
    final DatabaseClientService service = MySQLDatabaseClientService(
      properties: properties,
    );

    // 打开数据库连接
    await service.openConnection();

    // 执行查询并获取结果
    final results = await service.executeQuery(
      sql: 'SELECT id, name FROM test_table WHERE id > :id', // SQL查询语句
      parameters: {
        'id': 5, // 查询参数
      },
    );

    // 打印查询结果
    print(results);
    
    // 输出:
    // DatabaseResult(rows: 5, results: [{id: 6, name: Teste 06}, {id: 7, name: Teste 07}, {id: 8, name: Teste 08}, {id: 9, name: Teste 09}, {id: 10, name: Teste 10}])

    // 关闭数据库连接
    await service.closeConnection();

    // 退出程序
    exit(0);
  } on DatabaseException catch (error) {
    // 处理数据库异常
    print(error);
    exit(-1);
  }
}

该示例展示了如何使用iw_database插件来连接到MySQL数据库,执行查询,并处理可能发生的异常。

完整示例Demo

以下是完整的示例代码:

import 'dart:io';

import 'package:iw_database/iw_database.dart';

Future<void> main() async {
  try {
    // 定义数据库连接属性
    final DatabaseProperties properties = DatabaseProperties(
      host: 'localhost', // 数据库主机地址
      port: 3306, // 数据库端口
      name: 'tests', // 数据库名称
      username: 'root', // 数据库用户名
      password: 'wrah-baft-krup-cex-TEEH', // 数据库密码
      secure: false, // 是否使用安全连接
    );

    // 创建MySQL数据库客户端服务
    final DatabaseClientService service = MySQLDatabaseClientService(
      properties: properties,
    );

    // 打开数据库连接
    await service.openConnection();

    // 执行查询并获取结果
    final results = await service.executeQuery(
      sql: 'SELECT id, name FROM test_table WHERE id > :id', // SQL查询语句
      parameters: {
        'id': 5, // 查询参数
      },
    );

    // 打印查询结果
    print(results);
    
    // 输出:
    // DatabaseResult(rows: 5, results: [{id: 6, name: Teste 06}, {id: 7, name: Teste 07}, {id: 8, name: Teste 08}, {id: 9, name: Teste 09}, {id: 10, name: Teste 10}])

    // 关闭数据库连接
    await service.closeConnection();

    // 退出程序
    exit(0);
  } on DatabaseException catch (error) {
    // 处理数据库异常
    print(error);
    exit(-1);
  }
}

更多关于Flutter数据库管理插件iw_database的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据库管理插件iw_database的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用iw_database插件管理数据库的示例代码。iw_database是一个用于简化SQLite数据库操作的Flutter插件。

首先,确保在你的pubspec.yaml文件中添加iw_database依赖:

dependencies:
  flutter:
    sdk: flutter
  iw_database: ^最新版本号  # 替换为最新的版本号

然后运行flutter pub get来获取依赖。

初始化数据库和创建表

接下来,在你的Flutter项目中初始化数据库并创建一个表。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:iw_database/iw_database.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter iw_database Example'),
        ),
        body: MyHomePage(),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late DatabaseHelper _dbHelper;

  @override
  void initState() {
    super.initState();
    _dbHelper = DatabaseHelper();
    _dbHelper.initDatabase().then((_) {
      // 数据库初始化完成后的操作,例如创建表
      _dbHelper.createTable();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: ElevatedButton(
        onPressed: () async {
          // 示例:插入数据
          await _dbHelper.insertData('John Doe', 30);
          // 示例:查询数据
          var data = await _dbHelper.queryData();
          print(data);
        },
        child: Text('Insert and Query Data'),
      ),
    );
  }
}

class DatabaseHelper {
  late Database _database;

  Future<Database> initDatabase() async {
    // 打开或创建数据库
    _database = await openDatabase(
      join(await getDatabasesPath(), 'example.db'),
      version: 1,
      onCreate: (Database db, int version) async {
        // 在这里可以执行初始化操作,例如创建表
      },
    );
    return _database;
  }

  void createTable() async {
    await _database.execute('''
      CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER NOT NULL
      )
    ''');
  }

  Future<void> insertData(String name, int age) async {
    await _database.insert(
      'users',
      {'name': name, 'age': age},
      conflictAlgorithm: ConflictAlgorithm.replace,
    );
  }

  Future<List<Map<String, dynamic>>> queryData() async {
    return await _database.query('users');
  }
}

代码解释

  1. 依赖导入:在pubspec.yaml文件中添加iw_database依赖。
  2. 数据库初始化:在DatabaseHelper类中,通过openDatabase方法打开或创建数据库。
  3. 创建表:在createTable方法中执行SQL语句创建表。
  4. 插入数据:在insertData方法中,使用insert方法将数据插入到表中。
  5. 查询数据:在queryData方法中,使用query方法从表中查询数据。

注意事项

  • 在实际项目中,请确保数据库操作(如插入、查询等)在异步方法中执行,以避免阻塞UI线程。
  • iw_database插件本身是对SQLite的封装,因此你仍然可以使用原生SQL语句进行复杂的数据库操作。
  • 在处理数据库路径时,使用getDatabasesPath()方法可以获取到应用的数据库目录路径。

这个示例展示了如何使用iw_database插件在Flutter中进行基本的数据库管理操作。根据你的实际需求,你可以进一步扩展这个示例。

回到顶部