美文网首页flutter实战技术
flutter sqflite数据库使用

flutter sqflite数据库使用

作者: 江水东流 | 来源:发表于2024-01-28 17:48 被阅读0次

    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;
        });
      }
    

    具体的封装实现在https://gitee.com/kuaipai/my_app.git

    相关文章

      网友评论

        本文标题:flutter sqflite数据库使用

        本文链接:https://www.haomeiwen.com/subject/tzwwodtx.html