Dart/ NoSQL数据库 Hive的使用

4,176 阅读1分钟

引入

dependencies:
  hive: ^1.4.1+1 // 数据库
  hive_flutter: ^0.3.0+2 //flutter的拓展

dev_dependencies:
  hive_generator: ^0.7.0+2 // 注解解析器,自动生成Adapter
  build_runner: ^1.10.0

初始化

import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';
Hive.initFlutter('hive_db'); //flutter项目中在ApplicationDocumentDir下参数为子目录,
// 生成的boxes文件的保存路径简单使用

// 1.创建box. box相当于数据库的表的概念。每个box会保存在单独文件中。
var boxName = ‘test’; //名称要用全小些
await Hive.openBox<String>(boxName); // 创建box

// 2.保存数据
var box = Hive.box(boxName); //获取box
if(box.isOpen){ // 判断是否已开启  
// 增  
    box.put('key', 'value'); // 存储键值对  
    Map<String, String> entries = {'a':'aaa','b':'bbb'};  
    box.putAll(entries); // 存储map  
    box.putAt(0, 'ccc'); // 将[值]与第n个key关联。如果密钥不存在,则引发异常  
    box.add('ddd'); //用自动递增key保存[值]  
    List<String> values = [];  
    box.addAll(values); //用自动递增key保存数组  
    print('box.length = ${box.length}');  

// 查  
    var v1 = box.get('key', defaultValue: ''); //以自定义键取值  
    var v2 = box.getAt(2); //以自增的键取值  
    var list= box.values; // 所有的值 按键的顺序排序  、
    var keys= box.keys; // 所有的键  
    var lists= box.valuesBetween(startKey: 1, endKey: 3); // 所有的键  

// 删  
    box.delete('key'); // 删除单个  
    box.deleteAll(keys.toList().sublist(3)); // 删除多个  
    box.deleteAt(0); //删除指定位置的  
    box.clear(); //  清空  

    box.close(); // 关闭
}

自定义类型数据

1.定义类

import 'package:hive/hive.dart';

part 'test_info.g.dart';

@HiveType(typeId: 0)
class TestInfo extends HiveObject{  
    @HiveField(0)  
    String name;  
    TestInfo(this.name);
}

2.执行命令$flutter packages pub run build_runner build生成 adapter

3.注册

Hive.registerAdapter(TestInfoAdapter()); // 当要存取自定义的数据类型时 需先注册相应Aapter

4.使用

var box = Hive.box(boxName); //获取box
box.add(TestInfo('aaa');