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 数据库,并实现了添加、编辑和删除学生信息的功能。当用户点击添加按钮时,会弹出一个对话框,让用户输入学生的姓名,并将其保存到数据库中。当用户点击编辑按钮时,会弹出一个对话框,让用户修改学生的
极客教程