SQLite 在 Flutter 中访问 SQLite 数据库

SQLite 在 Flutter 中访问 SQLite 数据库

在本文中,我们将介绍如何在 Flutter 中访问 SQLite 数据库。SQLite 是一种轻量级的嵌入式数据库,被广泛应用于移动端和桌面应用程序中。

阅读更多:SQLite 教程

什么是 SQLite?

SQLite 是一种开源的嵌入式数据库引擎,它使用 C 语言编写而成,具有占用资源少、体积小、运行速度快等特点。SQLite 是一种零配置的数据库,不需要启动独立的服务进程,也不需要设置或管理配置文件,因此非常适合嵌入到移动应用程序中。

Flutter 是一个跨平台的移动应用程序开发框架,它提供了丰富的组件和包,可以帮助开发者简化应用程序的开发过程。Flutter 也提供了一些插件和库,用于在应用程序中访问和操作 SQLite 数据库。

在 Flutter 中使用 sqflite 插件

在 Flutter 中,我们可以使用 sqflite 插件来访问和操作 SQLite 数据库。sqflite 插件提供了简单易用的 API,可以在应用程序中执行 SQL 查询、插入、更新和删除操作。

下面是一个示例,演示了如何使用 sqflite 插件创建一个 SQLite 数据库,并执行一些基本的操作:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'SQLite Demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text('SQLite Demo'),
        ),
        body: Center(
          child: RaisedButton(
            child: Text('Create Database'),
            onPressed: () {
              _createDatabase();
            },
          ),
        ),
      ),
    );
  }

  _createDatabase() async {
    String databasePath = await getDatabasesPath();
    String path = join(databasePath, 'mydatabase.db');
    Database database = await openDatabase(path, version: 1,
        onCreate: (Database db, int version) async {
      await db.execute(
          'CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT)');
    });

    // 插入一条数据
    await database.insert('students', {'id': 1, 'name': 'Alice'});

    // 查询数据
    List<Map> result = await database.query('students');
    print(result);

    // 更新数据
    await database.update('students', {'name': 'Bob'}, where: 'id = ?', whereArgs: [1]);

    // 删除数据
    await database.delete('students', where: 'id = ?', whereArgs: [1]);

    // 关闭数据库连接
    await database.close();
  }
}

在上面的示例中,我们首先导入了 sqflite 插件,并创建了一个名为 mydatabase.db 的 SQLite 数据库。然后,我们插入了一条数据,查询了数据库中的所有数据,并对其中的数据进行了更新和删除操作。

Flutter 中的 SQLite 示例应用

下面是一个更完整的示例,展示了在 Flutter 中使用 SQLite 数据库的常见操作。该应用程序允许用户添加、编辑和删除学生信息,并实时更新数据库中的数据。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'SQLite Demo',
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  Database database;
  List<Map> students = [];

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

  _openDatabase() async {
    String databasePath = await getDatabasesPath();
    String path = join(databasePath, 'mydatabase.db');
    database = await openDatabase(path, version: 1,
        onCreate: (Database db, int version) async {
      await db.execute(
          'CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT)');
    });
    _loadData();
  }

  _loadData() async {
    List<Map> result = await database.query('students');
    setState(() {
      students = result;
    });
  }

  _addStudent() async {
    String name = await showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text('Add Student'),
          content: TextField(
            decoration: InputDecoration(hintText: 'Enter name'),
            onChanged: (value) {
              setState(() {
                name = value;
              });
            },
          ),
          actions: <Widget>[
            FlatButton(
              child: Text('Cancel'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
            FlatButton(
              child: Text('Add'),
              onPressed: () {
                Navigator.of(context).pop(name);
              },
            ),
          ],
        );
      },
    );

    if (name != null && name.isNotEmpty) {
      int id = await database.insert('students', {'name': name});
      _loadData();
    }
  }

  _editStudent(int id, String name) async {
    String newName = await showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text('Edit Student'),
          content: TextField(
            decoration: InputDecoration(hintText: 'Enter name'),
            onChanged: (value) {
              setState(() {
                newName = value;
              });
            },
          ),
          actions: <Widget>[
            FlatButton(
              child: Text('Cancel'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
            FlatButton(
              child: Text('Save'),
              onPressed: () {
                Navigator.of(context).pop(newName);
              },
            ),
          ],
        );
      },
    );

    if (newName != null && newName.isNotEmpty) {
      await database.update('students', {'name': newName}, where: 'id = ?', whereArgs: [id]);
      _loadData();
    }
  }

  _deleteStudent(int id) async {
    await database.delete('students', where: 'id = ?', whereArgs: [id]);
    _loadData();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SQLite Demo'),
      ),
      body: ListView.builder(
        itemCount: students.length,
        itemBuilder: (BuildContext context, int index) {
          Map student = students[index];
          return ListTile(
            title: Text(student['name']),
            trailing: Row(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                IconButton(
                  icon: Icon(Icons.edit),
                  onPressed: () {
                    _editStudent(student['id'], student['name']);
                  },
                ),
                IconButton(
                  icon: Icon(Icons.delete),
                  onPressed: () {
                    _deleteStudent(student['id']);
                  },
                ),
              ],
            ),
          );
        },
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () {
          _addStudent();
        },
      ),
    );
  }

  @override
  void dispose() {
    database.close();
    super.dispose();
  }
}

在上面的示例应用中,我们创建了一个名为 mydatabase.db 的 SQLite 数据库,并实现了添加、编辑和删除学生信息的功能。当用户点击添加按钮时,会弹出一个对话框,让用户输入学生的姓名,并将其保存到数据库中。当用户点击编辑按钮时,会弹出一个对话框,让用户修改学生的

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程