realm安装:
@H_404_4@ 1.全局安装 rnpm npm install -g rnpm @H_404_4@ 2.cd 到工程目录 npm install --save realm @H_404_4@ 3.将realm库依赖到RN项目中:rnpm link realm @H_404_4@@H_404_4@ 入门理解:(提取一些比较重要的概念,realm官方文档没有详细说明的点) @H_404_4@ 1.创建目录:默认在缓存document目录下
let db = new Realm({
path:'PUK.realm',
scheme:[IMSchema]
})
@H_404_4@ 可以通过 console.log(JSON.stringify(db.path)) 输出数据库的绝对路径, @H_404_4@ 所以自定义目录,path设置的路径需要也是绝对路径。 @H_404_4@ 2.realm增删改查基本操作的写法: @H_404_4@ a.修改:增,删,改 需要放在realm的写事务中完成。realm.write(()=>{
let car1= realm.create('Car',{id:1,name:'mini'}); // 【增】'Car'是表名,car 是表的一条数据
let car2= realm.create('Car',name:'dazong'},true);//[改]
//改需要满足两个条件:1.第三个参数true 2.id是主键 如果id不是主键,这句写法就是增
realm.delete(car2);//[删]
})
@H_404_4@ b.查:let cars = realm.objects('Car'); //取此表所有数据
let caRSSpecial = cars.filtered('name = "mini" OR name BEGINSWITH "m"'); //条件查询
let carsRange = cars.slice(0,5);//范围筛选
let caRSSorted = caRSSpercial.sorted('mini');//因为单纯范围筛选没什么意义,所以加上排序方法。
//通常使用方式:查询->排序->筛选
//注意:这里的排序只作用于内存,并不会反映在数据库中
@H_404_4@ 3.realm几个很有用的特性: @H_404_4@ 1.migration方法 @H_404_4@ 因为定义的scheme在对应的数据库中生成表之后,修改格式是违法的。所以需要用到migration. @H_404_4@ 它可以把旧数据字段整合到新的数据字段中。 @H_404_4@ 同时migration最大优势是可以对数据库实现版本控制: @H_404_4@ 写法:(copy官方)var schemas = [ { schema: schema1, schemaVersion: 1migration: migrationFunction1 }, : schema22: migrationFunction2 ... ] // the first schema to update to is the current schema version // since the first schema in our array is at var nextSchemaIndex = Realm.schemaVersion(Realm.defaultPath); while (nextSchemaIndex < schemas.length) { var migratedRealm new Realm(schemas[nextSchemaIndex++]); migratedRealm.close(); } // open the Realm with the latest schema var realm [schemas-]);@H_404_4@
2.auto-updated 机制:(copy 官方)
let hondas = realm.objects('Car').filtered'make = "Honda"'); // hondas.length == 0 realm.write(() => { realm.create{make: 'Honda'model'RSX'}); }); // hondas.length == 1@H_404_4@ hondas一次取完,可以一直与数据库保持同步,不用再次取。 @H_404_4@ 3.notification机制:(copy 官方)
// Observe Collection Notifications realm'Dog''age < 2').addListener((puppieschanges{ // Update UI in response to inserted objects changes.insertions.forEach((index{ //增 事件回调 let insertedDog = puppies[index]; ... }); // Update UI in response to modified objects changes.modifications{ //改 事件回调 let modifiedDog // Update UI in response to deleted objects changes.deletions{//查 事件回调 // Deleted objects cannot be accessed directly // Support for accessing deleted objects coming soon... }); }); // Unregister all listeners realm.removeAllListeners();@H_404_4@ 因为realm auto-updated机制,所以很好的能够支持数据监听并抛出数据变动事件。 @H_404_4@ 如果感兴趣继续探讨,欢迎加QQ群:429307812