Flutter数据库管理插件sqflite_android的使用
Flutter数据库管理插件sqflite_android的使用
sqflite_android
是 sqflite
插件的 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
更多关于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数据库。你可以通过点击按钮来执行插入、查询、更新和删除操作。注意,这些操作是异步的,因此使用了async
和await
关键字。
请确保在实际项目中处理异常和错误,比如数据库操作失败的情况。此外,对于UI的更新,你可能需要使用setState
来触发重新构建,以便显示最新的数据。