YonBuilder 移動開發平台開發者提供了多種本地資料存儲方案,包括 Local Storage、偏好資料、檔案和資料庫等,以滿足不同規模資料存儲需求。其中 Local Storage 和偏好資料一般用于存儲比較簡單、規模較小的資料,而檔案和資料庫多用于存儲大量資料,并且利于管理。
1. Local Storage
YonBuilder 移動開發平台對 html5 的 Local Storage 進行了封裝,在存儲時更加友善。通過 $api 對象的 setStorage 方法不僅可以存儲字元串,還可以直接存儲 JSON 對象,而 getStorage 擷取時也可以直接得到 JSON 對象。用法如下:
var key = 'user';
var user = {};
user.name = 'kenny';
user.email = '[email protected]';
$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, LastName varchar(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{
};
});