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

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

sqflite_androidsqflite 插件的 Android 实现。sqflite 是一个用于在 Flutter 应用中操作 SQLite 数据库的插件。

示例代码

以下是一个简单的示例,展示了如何使用 sqflite 插件在 Flutter 应用中创建和操作 SQLite 数据库。

import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io' show Directory;

Future<void> main() async {
  // 设置兼容模式支持
  supportsCompatMode = true;

  // 运行主应用
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'SQFLite Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('SQFLite 示例'),
        ),
        body: SQFLiteExample(),
      ),
    );
  }
}

class SQFLiteExample extends StatefulWidget {
  [@override](/user/override)
  _SQFLiteExampleState createState() => _SQFLiteExampleState();
}

class _SQFLiteExampleState extends State<SQFLiteExample> {
  String _databasePath = '';
  List<Map<String, dynamic>> _dataList = [];

  [@override](/user/override)
  void initState() {
    super.initState();
    initializeDatabase();
  }

  Future<void> initializeDatabase() async {
    // 获取应用目录
    final directory = await getApplicationDocumentsDirectory();
    // 创建数据库路径
    final path = '${directory.path}/my_database.db';
    // 打开数据库
    final database = await openDatabase(path, version: 1, onCreate: (db, version) async {
      // 创建表
      await db.execute(
        'CREATE TABLE my_table(id INTEGER PRIMARY KEY, name TEXT)',
      );
    });

    // 查询数据
    final data = await database.query('my_table');
    setState(() {
      _dataList = data;
      _databasePath = path;
    });
  }

  Future<void> insertData(String name) async {
    final directory = await getApplicationDocumentsDirectory();
    final path = '${directory.path}/my_database.db';
    final database = await openDatabase(path);

    await database.insert(
      'my_table',
      {'name': name},
      conflictAlgorithm: ConflictAlgorithm.replace,
    );

    // 重新查询数据
    final data = await database.query('my_table');
    setState(() {
      _dataList = data;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      children: [
        ElevatedButton(
          onPressed: () async {
            await insertData('测试数据');
          },
          child: Text('插入数据'),
        ),
        Expanded(
          child: ListView.builder(
            itemCount: _dataList.length,
            itemBuilder: (context, index) {
              return ListTile(
                title: Text(_dataList[index]['name'] ?? ''),
              );
            },
          ),
        ),
        Text('数据库路径: $_databasePath'),
      ],
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter中使用sqflite_android插件来管理SQLite数据库的示例代码。不过需要注意的是,sqflite_android是特定于Android平台的插件,实际上Flutter社区更常用的是跨平台的sqflite插件。为了简化说明,这里我将使用sqflite插件,因为它同样支持Android,并且更加通用。

首先,确保你的Flutter项目中已经添加了sqflite依赖。你可以在pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  sqflite: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来是一个简单的示例,展示如何使用sqflite插件来创建数据库、表,以及进行基本的CRUD(创建、读取、更新、删除)操作。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter SQLite Demo',
      theme: ThemeData(
        primarySw  atch@:override Colors
.  blue_,My
HomePage      State), create
State      ()home =>: _ MyMyHomePageHomePage(),State
();    
);}

  
}
}

class MyHomePage extends StatefulWidget {
class _MyHomePageState extends State<MyHomePage> {
  Database? _db;

  @override
  void initState() {
    super.initState();
    _initializeDatabase();
  }

  Future<void> _initializeDatabase() async {
    // 打开数据库(如果数据库不存在,则创建一个新的)
    _db = await openDatabase(
      // 数据库文件的路径(在设备上的位置)
      '(default dir)/demo.db',
      version: 1,
      onCreate: (Database db, int version) async {
        // 创建表
        await db.execute(
          'CREATE TABLE Users('
          'id INTEGER PRIMARY KEY,'
          'name TEXT NOT NULL,'
          'age INTEGER NOT NULL'
          ')',
        );
      },
      onUpgrade: (Database db, int oldVersion, int newVersion) async {
        // 数据库版本升级时的操作(如需要)
        await db.execute('DROP TABLE IF EXISTS Users');
        onCreate(db, newVersion);
      },
    );
  }

  Future<void> insertUser(String name, int age) async {
    // 插入数据
    await _db?.insert(
      'Users',
      {'name': name, 'age': age},
      conflictAlgorithm: ConflictAlgorithm.replace,
    );
  }

  Future<List<Map<String, dynamic>>> getUsers() async {
    // 查询数据
    return await _db?.query('Users');
  }

  Future<void> updateUser(int id, String name, int age) async {
    // 更新数据
    await _db?.update(
      'Users',
      {'name': name, 'age': age},
      where: 'id = ?',
      whereArgs: [id],
    );
  }

  Future<void> deleteUser(int id) async {
    // 删除数据
    await _db?.delete(
      'Users',
      where: 'id = ?',
      whereArgs: [id],
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter SQLite Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            ElevatedButton(
              onPressed: () {
                insertUser('Alice', 30);
                // 更新UI,这里可能需要使用setState来刷新数据
              },
              child: Text('Insert User'),
            ),
            ElevatedButton(
              onPressed: async () {
                List<Map<String, dynamic>> users = await getUsers();
                // 打印用户列表到控制台,或显示到UI上
                print(users);
              },
              child: Text('Get Users'),
            ),
            ElevatedButton(
              onPressed: () {
                updateUser(1, 'Bob', 35);
                // 更新UI
              },
              child: Text('Update User'),
            ),
            ElevatedButton(
              onPressed: () {
                deleteUser(1);
                // 更新UI
              },
              child: Text('Delete User'),
            ),
          ],
        ),
      ),
    );
  }
}

这个示例展示了如何使用sqflite插件来管理SQLite数据库。你可以通过点击按钮来执行插入、查询、更新和删除操作。注意,这些操作是异步的,因此使用了asyncawait关键字。

请确保在实际项目中处理异常和错误,比如数据库操作失败的情况。此外,对于UI的更新,你可能需要使用setState来触发重新构建,以便显示最新的数据。

回到顶部