本帖最后由 技术咨询-特特 于 2023-7-13 10:51 编辑
YonBuilder移动开发平台开发者提供了多种本地数据存储方案,包括Local Storage、偏好数据、文件和数据库等,以满足不同规模数据存储需求。其中LocalStorage和偏好数据一般用于存储比较简单、规模较小的数据,而文件和数据库多用于存储大量数据,并且利于管理。 1. LocalStorage YonBuilder移动开发平台对html5的Local Storage进行了封装,在存储时更加方便。通过$api对象的setStorage方法不仅可以存储字符串,还可以直接存储JSON对象,而getStorage获取时也可以直接得到JSON对象。用法如下: var key = 'user'; var user = {}; user.name ='kenny'; user.email ='kenny**.**'; $api.setStorage(key,user); user = $api.getStorage(key);
2. 偏好数据 适用于少量的偏好设置数据的存储,一般用于保存一些状态值等,不推荐大量的数据通过此方式存储。 api对象提供了setPrefs、getPrefs、removePrefs方法,以键值对的方式传入参数,进行设置、获取和移除等,例如记录应用是否是第一次启动: api.setPrefs({ firstLaunch:false }); 其它方法请参考api对象文档。 3. 文件 (1)api对象方法 YonBuilder移动开发平台开发者提供了文件和文件夹相关操作API,包括创建、移动、删除文件和文件夹等,以及文本内容的读写操作。 其中api对象提供了基本的readFile、writeFile方法,支持整个文件内容的读写操作,其读写文件示例代码如下: api.readFile({ path: 'fs://a.txt' }, function(ret,err){ if(ret.status){ var data = ret.data; } }); api.writeFile({ path: 'fs://a.txt', data:'writeFile测试内容' }, function(ret,err){ if(ret.status){ api.alert({msg:'写入文件成功'}); } else{ api.alert({msg:err.msg}); } }); (2)fs对象方法 若要使用更加丰富的文件操作API,则需要引入fs原生插件,该原生插件详细定义了文件和文件夹的相关操作,并且支持文本内容的指定位置读写,其写文件示例代码如下: var fs = api.require('fs'); fs.open({ path:'fs://test.txt', flags:'read_write' },function(ret, err) { if (ret.status) { var fd = ret.fd; //fd为文件句柄 fs.write({ fd:fd, data:'text', offset:0 },function(ret,err){ if (ret.status) { api.alert({msg:'write操作成功'}); } else{ api.alert({msg:err.msg}); } }); } }); 其它方法请参考fs原生插件文档。 4. 数据库 YonBuilder移动开发平台开发者提供了操作本地数据库的接口,但需要开发者熟悉基本的SQL语句,如创建表、插入和更新数据、获取数据等操作。 db原生插件提供了数据库相关操作API,详见db原生插件文档。部分示例代码如下: 创建一张名为Persons的表: var db = api.require('db'); var sql = 'CREATE TABLE Persons(Id_P int, LastNamevarchar(255), FirstName varchar(255), Address varchar(255), City varchar(255))'; db.executeSql({ name:'databaseName', sql: sql }, function(ret, err){ if(ret.status){ api.alert({msg:'创建表成功'}); } else{ api.alert({msg:err.msg}); } });
从Persons表里面查询数据: var db = api.require('db'); var sql = 'SELECT * FROM Persons'; db.selectSql({ name:'databaseName', sql: sql }, function(ret, err){ if(ret.status){ var data = ret.data; } else{
}; });
|