Flutter数据库管理插件sql_data_helper的使用
Flutter数据库管理插件sql_data_helper的使用
sql_data_helper
一个用于组织数据库数据的Dart包。
开始使用
安装
在你的Flutter项目中,将该包添加到依赖项中:
flutter pub add sql_data_helper
或者在pubspec.yaml
文件中添加以下内容:
dependencies:
...
sql_data_helper: #最新版本号
...
使用示例
创建字段
SqlColumnModel idField = SqlColumnModel("field_name",
type: SqlDataType.integer, primaryKey: true, autoIncrement: true);
创建外键
SqlForeignKeyModel fkField = SqlForeignKeyModel(
"field",
table: "table_name",
columnPrimaryKey: "pk_of_table",
onUpdateRule: SqlForeignKeyRules.cascade,
onDeleteRule: SqlForeignKeyRules.cascade);
示例:组织一个表
abstract class SqlTableRestaurant {
static const String tableName = "restaurants";
static final SqlColumnModel id = SqlColumnModel("id",
type: SqlDataType.integer, primaryKey: true, autoIncrement: true);
static final SqlColumnModel name = SqlColumnModel("name", type: SqlDataType.text, notNull: true);
String get toCreate => "CREATE TABLE IF NOT EXISTS $tableName (${[
id.toCreate,
name.toCreate
].join(" ")})";
}
带外键的示例
abstract class SqlTableFood {
static const String tableName = "foods";
static final SqlColumnModel id = SqlColumnModel("id",
type: SqlDataType.integer, primaryKey: true, autoIncrement: true);
static final SqlColumnModel restaurantId = SqlColumnModel("restaurant_id",
type: SqlDataType.integer, notNull: true);
static final SqlColumnModel name =
SqlColumnModel("name", type: SqlDataType.text);
static final SqlForeignKeyModel _restaurantFk = SqlForeignKeyModel(
restaurantId.name,
table: SqlTableRestaurant.tableName,
columnPrimaryKey: SqlTableRestaurant.id.name,
onUpdateRule: SqlForeignKeyRules.cascade,
onDeleteRule: SqlForeignKeyRules.cascade);
String get toCreate => "CREATE TABLE IF NOT EXISTS $tableName (${[
id.toCreate,
restaurantId.toCreate,
name.toCreate,
_restaurantFk.toCreate
].join(" ")})";
}
更多关于Flutter数据库管理插件sql_data_helper的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库管理插件sql_data_helper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
sql_data_helper
是一个用于简化 Flutter 应用中 SQLite 数据库操作的插件。它提供了一种简单的方式来执行常见的数据库操作,如插入、查询、更新和删除数据。以下是如何在 Flutter 项目中使用 sql_data_helper
插件的步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 sql_data_helper
插件的依赖。
dependencies:
flutter:
sdk: flutter
sql_data_helper: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 创建数据库和表
在使用 sql_data_helper
之前,你需要创建一个数据库并定义表结构。你可以通过继承 SQLDataHelper
类来实现这一点。
import 'package:sql_data_helper/sql_data_helper.dart';
class MyDatabase extends SQLDataHelper {
MyDatabase() : super('my_database.db');
[@override](/user/override)
Future<void> onCreate(Database db, int version) async {
await db.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
''');
}
[@override](/user/override)
Future<void> onUpgrade(Database db, int oldVersion, int newVersion) async {
// 在这里处理数据库升级逻辑
}
}
3. 初始化数据库
在你的应用启动时,初始化数据库。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final myDatabase = MyDatabase();
await myDatabase.init();
runApp(MyApp());
}
4. 插入数据
使用 insert
方法向数据库中插入数据。
Future<void> insertUser(String name, int age) async {
final db = await myDatabase.database;
await db.insert('users', {'name': name, 'age': age});
}
5. 查询数据
使用 query
方法从数据库中查询数据。
Future<List<Map<String, dynamic>>> getUsers() async {
final db = await myDatabase.database;
return await db.query('users');
}
6. 更新数据
使用 update
方法更新数据库中的数据。
Future<void> updateUser(int id, String name, int age) async {
final db = await myDatabase.database;
await db.update('users', {'name': name, 'age': age}, where: 'id = ?', whereArgs: [id]);
}
7. 删除数据
使用 delete
方法从数据库中删除数据。
Future<void> deleteUser(int id) async {
final db = await myDatabase.database;
await db.delete('users', where: 'id = ?', whereArgs: [id]);
}
8. 使用示例
以下是一个完整的示例,展示了如何在 Flutter 应用中使用 sql_data_helper
插件。
import 'package:flutter/material.dart';
import 'package:sql_data_helper/sql_data_helper.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final myDatabase = MyDatabase();
await myDatabase.init();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
[@override](/user/override)
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final myDatabase = MyDatabase();
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SQL Data Helper Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () async {
await insertUser('John Doe', 30);
print('User inserted');
},
child: Text('Insert User'),
),
ElevatedButton(
onPressed: () async {
final users = await getUsers();
print('Users: $users');
},
child: Text('Get Users'),
),
ElevatedButton(
onPressed: () async {
await updateUser(1, 'Jane Doe', 25);
print('User updated');
},
child: Text('Update User'),
),
ElevatedButton(
onPressed: () async {
await deleteUser(1);
print('User deleted');
},
child: Text('Delete User'),
),
],
),
),
);
}
Future<void> insertUser(String name, int age) async {
final db = await myDatabase.database;
await db.insert('users', {'name': name, 'age': age});
}
Future<List<Map<String, dynamic>>> getUsers() async {
final db = await myDatabase.database;
return await db.query('users');
}
Future<void> updateUser(int id, String name, int age) async {
final db = await myDatabase.database;
await db.update('users', {'name': name, 'age': age}, where: 'id = ?', whereArgs: [id]);
}
Future<void> deleteUser(int id) async {
final db = await myDatabase.database;
await db.delete('users', where: 'id = ?', whereArgs: [id]);
}
}
class MyDatabase extends SQLDataHelper {
MyDatabase() : super('my_database.db');
[@override](/user/override)
Future<void> onCreate(Database db, int version) async {
await db.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
''');
}
[@override](/user/override)
Future<void> onUpgrade(Database db, int oldVersion, int newVersion) async {
// 在这里处理数据库升级逻辑
}
}