Flutter数据库管理插件database的使用
Flutter数据库管理插件database的使用
什么是这个?
我们希望有一个与供应商无关的API来访问类似SQL的数据库。我们几年前就弃用了之前的草案,现在希望设计一个更简单、更好的方案。
API的设计还在进行中。我们鼓励大家讨论这个API应该是什么样子,并欢迎提出拉取请求。:)
由于提供的内容和示例代码比较有限,我将基于Flutter常见的数据库插件sqflite
(一个常用的SQLite数据库插件)来创建一个完整的示例demo,以帮助您理解如何在Flutter中使用数据库管理插件。
示例Demo
以下是一个简单的Flutter应用程序示例,它展示了如何使用sqflite
插件来创建数据库、插入数据和查询数据。
首先,在您的pubspec.yaml
文件中添加sqflite
依赖:
dependencies:
flutter:
sdk: flutter
sqflite: ^2.0.0+3
接下来,创建一个数据库帮助类DatabaseHelper.dart
,用于管理数据库连接和操作:
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
class DatabaseHelper {
static final _databaseName = "MyDatabase.db";
static final _databaseVersion = 1;
// 表名
static final table = 'my_table';
// 列名
static final columnId = '_id';
static final columnName = 'name';
// 单例模式
DatabaseHelper._privateConstructor();
static final DatabaseHelper instance = DatabaseHelper._privateConstructor();
static Database? _database;
// 获取数据库实例
Future<Database> get database async {
if (_database != null) return _database!;
_database = await _initDatabase();
return _database!;
}
// 初始化数据库
_initDatabase() async {
String path = join(await getDatabasesPath(), _databaseName);
return await openDatabase(
path,
version: _databaseVersion,
onCreate: _onCreate,
);
}
// 创建表
Future _onCreate(Database db, int version) async {
await db.execute('''
CREATE TABLE $table (
$columnId INTEGER PRIMARY KEY AUTOINCREMENT,
$columnName TEXT NOT NULL
)
''');
}
// 插入数据
Future<int> insert(Map<String, dynamic> row) async {
Database db = await instance.database;
return await db.insert(table, row);
}
// 查询所有数据
Future<List<Map<String, dynamic>>> queryAllRows() async {
Database db = await instance.database;
return await db.query(table);
}
// 根据ID查询数据
Future<List<Map<String, dynamic>>> queryById(int id) async {
Database db = await instance.database;
return await db.query(table, where: '$columnId = ?', whereArgs: [id]);
}
// 更新数据
Future<int> update(Map<String, dynamic> row) async {
Database db = await instance.database;
int id = row[columnId];
return await db.update(
table,
row,
where: '$columnId = ?',
whereArgs: [id],
);
}
// 删除数据
Future<int> delete(int id) async {
Database db = await instance.database;
return await db.delete(
table,
where: '$columnId = ?',
whereArgs: [id],
);
}
}
然后,在主应用程序文件main.dart
中使用该数据库帮助类:
import 'package:flutter/material.dart';
import 'DatabaseHelper.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Database Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _insertData() async {
Map<String, dynamic> row = {DatabaseHelper.columnName: 'Item $_counter'};
final id = await DatabaseHelper.instance.insert(row);
print('Inserted row id: $id');
setState(() {
_counter++;
});
}
void _queryData() async {
final allRows = await DatabaseHelper.instance.queryAllRows();
print('Query all rows:');
allRows.forEach((row) => print(row));
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _insertData,
child: Text('Insert Data'),
),
ElevatedButton(
onPressed: _queryData,
child: Text('Query Data'),
),
],
),
),
);
}
}
更多关于Flutter数据库管理插件database的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库管理插件database的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,我可以为你提供一个关于如何在Flutter中使用数据库管理插件(如sqlite3
或floor
)的示例。这里我将使用floor
插件,因为它是一个比较流行且易于使用的ORM(对象关系映射)库,可以简化SQLite数据库的操作。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加floor
依赖:
dependencies:
flutter:
sdk: flutter
floor: ^1.0.0 # 请检查最新版本号
然后运行flutter pub get
来获取依赖。
2. 创建数据实体
创建一个数据实体类,并使用@Entity
注解。例如,我们创建一个User
实体:
import 'package:floor/floor.dart';
@Entity(tableName: 'users')
data class User(
@PrimaryKey(autoGenerate: true) val id: Int,
@ColumnInfo(name: 'name') val name: String,
@ColumnInfo(name: 'age') val age: Int,
)
3. 创建DAO接口
DAO(数据访问对象)接口用于定义数据库操作。使用@Dao
注解来标记DAO接口,并定义CRUD(创建、读取、更新、删除)操作:
import 'package:floor/floor.dart';
import 'user_entity.dart';
@Dao
interface UserDao {
@Insert(onConflict: ConflictStrategy.REPLACE)
Future<Void> insertUser(User user);
@Query('SELECT * FROM users')
Future<List<User>> getAllUsers();
@Update
Future<Void> updateUser(User user);
@Delete
Future<Void> deleteUser(User user);
}
4. 创建数据库抽象类
创建一个数据库抽象类,并使用@Database
注解。这个类将包含所有DAO接口,并用于打开数据库连接:
import 'package:floor/floor.dart';
import 'user_dao.dart';
import 'user_entity.dart';
@Database(entities: [User], version: 1, daos: [UserDao])
abstract class AppDatabase extends FloorDatabase {
UserDao get userDao();
}
5. 打开数据库连接
在你的应用程序中,你需要打开数据库连接。这通常在Application
或ViewModel
类中完成:
import 'package:flutter/material.dart';
import 'package:floor/floor.dart';
import 'app_database.dart';
import 'user_dao.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
final database = await $FloorDatabase.databaseBuilder('app_database.db')
.build();
runApp(MyApp(database.userDao));
}
class MyApp extends StatelessWidget {
final UserDao userDao;
MyApp(this.userDao);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(userDao: userDao),
);
}
}
class HomeScreen extends StatefulWidget {
final UserDao userDao;
HomeScreen({required this.userDao});
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Floor Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
final user = User(name: 'John Doe', age: 30);
await widget.userDao.insertUser(user);
final allUsers = await widget.userDao.getAllUsers();
print(allUsers);
},
child: Text('Insert User'),
),
),
);
}
}
6. 运行应用
确保你的开发环境已经设置好,然后运行你的Flutter应用。你应该能够在控制台中看到插入的用户信息。
这个示例展示了如何使用floor
插件在Flutter中管理SQLite数据库。你可以根据需要扩展这个示例,添加更多的实体和DAO操作。