flutter项目里需要存储数据如果比较少可以用SharedPreferences,
如果存储数据比较多 尤其需要筛选的话 我们就得用数据库了
我封装了sqflite,存一个model 取出来也是一个model
需要查询的属性需要自己设置一个独立属性 ,其它属性放到一个jsonString里面就行
首先建立一个model id是主键 默认自增,也可以用项目里数据属性的一个id代替,就不用自增了.
class NoteModel {
//唯一di 如果需要查询属性比较多,这里都增加上,并在创建table地方增加属性
//db.execute( 'create table if not exists $tableName
// (id integer primary key autoincrement, content text)');
int? id;
// 可以存 jsonString,使用时候 转成model
String? content;
NoteModel({this.id, this.content});
///提供fromJson以方便将数据库查询结果,转成Dart Model
NoteModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
content = json['content'];
}
///提供toJson以方便在持久化数据的时候使用
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['content'] = content;
return data;
}
}
下面是使用方法
//数据库名字
String dbName = 'test';
//表名
String tableName = 'tableName1';
Database? database;
JDTableTool? tableTool;
//初始化
void _doInit() async {
// 每次TestDbContentModel结构变化 version +1
Database? db = storage.dateBaseMap[dbName];
if (db != null) {
database = db!;
} else {
database =
await openDatabase(dbName, version: 1, onCreate: (db, version) {
// 在数据库首次创建时执行的操作
}, onUpgrade: (db, oldVersion, newVersion) async {
// 在数据库升级时执行的操作
if (oldVersion == 1 && newVersion == 2) {
// 如果当前数据库版本为1,目标版本为2,执行操作
}
});
}
jdLog('database?.getVersion: ${await database?.getVersion()}');
if (database != null) {
// name TEXT, value INTEGER, num REAL; 需要查询的属性 必须单独写成属性,如果你的map里面有唯一id 就不必要自增了
tableTool = JDStorageTool(database!, tableName,
'create table if not exists $tableName (id integer primary key autoincrement, content text)');
_loadAll();
_loadAll();
}
}
void destroy() {
tableTool?.destroy();
}
///增加数据
void _doSave(String nameValue, int age) {
TestDbContentModel contentModel =
TestDbContentModel.fromJson({'name': nameValue, 'age': age});
tableTool?.saveNote(NoteModel(content: jsonEncode(contentModel.toJson())));
_loadAll();
}
///查询数据
void _loadAll() async {
var list = await tableTool?.getAllNote() ?? [];
jdLog('list.length-- ${list.length}');
setState(() {
noteList = list;
});
_getCount();
}
///更新数据
void _updateContent() {
if (id == null || name == null) return;
TestDbContentModel contentModel =
TestDbContentModel.fromJson({'name': name, 'age': age});
var model = NoteModel(id: id, content: jsonEncode(contentModel.toJson()));
tableTool?.update(model);
_loadAll();
}
///删除数据
void _doDelete(NoteModel model) {
tableTool?.deleteNote(model.id!);
_loadAll();
}
///查询列数
void _getCount() async {
var count = await tableTool?.getNoteCount() ?? 0;
setState(() {
this.count = count;
});
}
网友评论