Flutter数据库构建插件sql_build_database的使用
Flutter数据库构建插件sql_build_database的使用
sql_build_database
是一个用于简化和快速创建数据库结构的新 Flutter 包。
示例用法
在 pubspec.yaml
文件中添加依赖:
dependencies:
sql_build_database: ^1.0.4
然后运行 flutter pub get
来安装依赖。
SBDColumnDataType
SBDColumnDataType
枚举定义了列的数据类型:
INTEGER
TEXT
REAL
BLOB
enum SBDColumnDataType {INTEGER, TEXT, REAL, BLOB}
SBDColumn
SBDColumn
类用于定义表的列:
name
: 列名type
: 数据类型isUnique
: 是否唯一isNotNull
: 是否不允许为空defaultValue
: 默认值isPrimaryKey
: 是否为主键isAutoIncrement
: 是否自动递增foreignKey
: 外键引用
SBDColumn(
name: 'COLUMN_NAME',
type: SBDColumnDataType.INTEGER,
isUnique: true,
isNotNull: true,
defaultValue: 1,
isPrimaryKey: true,
isAutoIncrement: true,
foreignKey: ['table1', 'COLUM_NAME']
);
SBDTable
SBDTable
类用于定义表结构:
name
: 表名primaryKeyName
: 主键名columns
: 列列表initialInserts
: 初始插入数据execInitialInserts
: 是否执行初始插入
SBDTable(
name: 'users',
primaryKeyName: 'USER_CODE',
columns: [
SBDColumn(
name: 'USER_NAME',
type: SBDColumnDataType.TEXT,
isNotNull: true,
),
SBDColumn(
name: 'USER_EMAIL',
type: SBDColumnDataType.TEXT,
isNotNull: true,
isUnique: true,
),
SBDColumn(
name: 'USER_ACTIVE',
type: SBDColumnDataType.INTEGER,
isNotNull: true,
defaultValue: 1,
),
],
initialInserts: [
{'USER_CODE': 1, 'USER_NAME': 'Danilo Dos Satos Carreiro', 'USER_EMAIL': 'danilocarsan@gmail.com', 'USER_ACTIVE': 1},
],
execInitialInserts: true
)
打印表结构:
print(tb.build());
输出结果:
CREATE TABLE users (
USER_CODE INTEGER PRIMARY KEY AUTOINCREMENT,
USER_NAME TEXT NOT NULL,
USER_EMAIL TEXT NOT NULL UNIQUE,
USER_ACTIVE INTEGER NOT NULL DEFAULT 1
);
INSERT INTO users(USER_CODE, USER_NAME, USER_EMAIL, USER_ACTIVE) VALUES('1', 'Danilo Dos Satos Carreiro', 'danilocarsan@gmail.com', '1');
打印初始插入语句:
print(tb.initialInserts());
输出结果:
[
INSERT INTO users(USER_CODE, USER_NAME, USER_EMAIL, USER_ACTIVE) VALUES('1', 'Danilo Dos Satos Carreiro', 'danilocarsan@gmail.com', '1');
]
SBD
SBD
类用于定义多个表的结构:
SBD([
SBDTable(
name: 'users',
primaryKeyName: 'USER_CODE',
columns: [
SBDColumn(
name: 'USER_NAME',
type: SBDColumnDataType.TEXT,
isNotNull: true,
),
SBDColumn(
name: 'USER_EMAIL',
type: SBDColumnDataType.TEXT,
isNotNull: true,
isUnique: true,
),
SBDColumn(
name: 'USER_ACTIVE',
type: SBDColumnDataType.INTEGER,
isNotNull: true,
defaultValue: 1,
),
],
initialInserts: [
{'USER_CODE': 1, 'USER_NAME': 'Danilo Dos Satos Carreiro', 'USER_EMAIL': 'danilocarsan@gmail.com', 'USER_ACTIVE': 1},
],
execInitialInserts: true
),
SBDTable(
name: 'logs',
primaryKeyName: 'LOG_CODE',
columns: [
SBDColumn(
name: 'MESSAGE',
type: SBDColumnDataType.TEXT,
isNotNull: true,
),
SBDColumn(
name: 'LOG_USER_CODE',
isNotNull: true,
foreignKey: ['users', 'USER_CODE']
)
]
)
]);
打印数据库结构:
print(db.build());
输出结果:
CREATE TABLE users (
USER_CODE INTEGER PRIMARY KEY AUTOINCREMENT,
USER_NAME TEXT NOT NULL,
USER_EMAIL TEXT NOT NULL UNIQUE,
USER_ACTIVE INTEGER NOT NULL DEFAULT 1
);
CREATE TABLE logs (
LOG_CODE INTEGER PRIMARY KEY AUTOINCREMENT,
MESSAGE TEXT NOT NULL,
LOG_USER_CODE TEXT NOT NULL REFERENCES users(USER_CODE),
FOREIGN KEY (LOG_USER_CODE) REFERENCES users (USER_CODE)
);
获取开始帮助
对于如何开始使用 Flutter,请参阅我们的 在线文档,其中包含教程、示例、移动开发指南和完整的 API 参考。
完整示例
// 导入包
import '../lib/sql_build_database.dart';
void main() {
// 创建数据库结构
var db = SBD([
SBDTable(
name: 'users',
primaryKeyName: 'USER_CODE',
columns: [
SBDColumn(
name: 'USER_NAME',
type: SBDColumnDataType.TEXT,
isNotNull: true,
),
SBDColumn(
name: 'USER_EMAIL',
type: SBDColumnDataType.TEXT,
isNotNull: true,
isUnique: true,
),
SBDColumn(
name: 'USER_ACTIVE',
type: SBDColumnDataType.INTEGER,
isNotNull: true,
defaultValue: 1,
),
],
initialInserts: [
{'USER_CODE': 1, 'USER_NAME': 'Danilo Dos Satos Carreiro', 'USER_EMAIL': 'danilocarsan@gmail.com', 'USER_ACTIVE': 1},
],
execInitialInserts: true
),
SBDTable(
name: 'logs',
primaryKeyName: 'LOG_CODE',
columns: [
SBDColumn(
name: 'MESSAGE',
type: SBDColumnDataType.TEXT,
isNotNull: true,
),
SBDColumn(
name: 'LOG_USER_CODE',
isNotNull: true,
foreignKey: ['users', 'USER_CODE']
)
]
)
]);
// 打印数据库结构
print(db.build());
}
更多关于Flutter数据库构建插件sql_build_database的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库构建插件sql_build_database的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
sql_build_database
是一个用于在 Flutter 中构建和管理 SQLite 数据库的插件。它允许你通过 Dart 代码定义数据库表结构,并自动生成创建和升级数据库的 SQL 语句。以下是如何使用 sql_build_database
插件的详细步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 sql_build_database
插件的依赖:
dependencies:
flutter:
sdk: flutter
sql_build_database: ^最新版本
然后运行 flutter pub get
来安装依赖。
2. 定义数据库表结构
接下来,你需要定义数据库中的表结构。你可以通过 Dart 类来定义表结构。例如,假设你要创建一个 User
表:
import 'package:sql_build_database/sql_build_database.dart';
@Table(name: 'User')
class User {
@PrimaryKey(autoIncrement: true)
int? id;
@Column(name: 'name', type: ColumnType.TEXT)
String name;
@Column(name: 'age', type: ColumnType.INTEGER)
int age;
User({this.id, required this.name, required this.age});
}
3. 创建数据库
使用 DatabaseBuilder
来创建数据库:
import 'package:sql_build_database/sql_build_database.dart';
void main() async {
// 定义数据库名称和版本
final databaseBuilder = DatabaseBuilder(
databaseName: 'my_database.db',
version: 1,
);
// 添加表
databaseBuilder.addTable(User);
// 创建数据库
final database = await databaseBuilder.build();
// 现在你可以使用 database 对象进行数据库操作
}
4. 数据库操作
你可以使用 database
对象执行常见的数据库操作,如插入、查询、更新和删除数据。
插入数据
final user = User(name: 'Alice', age: 25);
await database.insert(user);
查询数据
final users = await database.query(User);
for (var user in users) {
print('User: ${user.name}, Age: ${user.age}');
}
更新数据
final user = users.first;
user.name = 'Bob';
await database.update(user);
删除数据
await database.delete(user);
5. 数据库升级
当你需要修改数据库结构时,可以通过增加数据库版本号来触发数据库升级。例如,如果你需要添加一个新表 Post
,可以这样做:
@Table(name: 'Post')
class Post {
@PrimaryKey(autoIncrement: true)
int? id;
@Column(name: 'title', type: ColumnType.TEXT)
String title;
@Column(name: 'content', type: ColumnType.TEXT)
String content;
Post({this.id, required this.title, required this.content});
}
void main() async {
final databaseBuilder = DatabaseBuilder(
databaseName: 'my_database.db',
version: 2, // 增加版本号
);
databaseBuilder.addTable(User);
databaseBuilder.addTable(Post); // 添加新表
final database = await databaseBuilder.build();
}
6. 处理数据库升级逻辑
如果需要更复杂的升级逻辑,可以通过 onUpgrade
回调来处理:
void main() async {
final databaseBuilder = DatabaseBuilder(
databaseName: 'my_database.db',
version: 2,
);
databaseBuilder.addTable(User);
databaseBuilder.addTable(Post);
databaseBuilder.onUpgrade = (db, oldVersion, newVersion) async {
if (oldVersion < 2) {
// 执行从版本 1 到版本 2 的升级逻辑
await db.execute('ALTER TABLE User ADD COLUMN email TEXT');
}
};
final database = await databaseBuilder.build();
}
7. 处理数据库降级
如果需要处理数据库降级,可以使用 onDowngrade
回调:
void main() async {
final databaseBuilder = DatabaseBuilder(
databaseName: 'my_database.db',
version: 1, // 降级到版本 1
);
databaseBuilder.addTable(User);
databaseBuilder.onDowngrade = (db, oldVersion, newVersion) async {
if (oldVersion > 1) {
// 执行从版本 2 到版本 1 的降级逻辑
await db.execute('DROP TABLE IF EXISTS Post');
}
};
final database = await databaseBuilder.build();
}