最近手头上有个项目,需要使用到移动跨平台技术。在网络上搜罗了一下,发现有两个比较好的跨平台开发工具。
1、Cordova/PhoneGap
这两个其实是同一个项目,PhoneGap有部分的核心代码放到了Apache基金会开源,于是改名为Cordova。但PhoneGap依然是有团队继续开发。所以现在同时存在这两个项目。
Phonegap网址: http://phonegap.com/
2、Corona
游戏开发跨平台工具,主要用于游戏开发或者对性能要求比较高的应用也适合使用,只是暂时不支持windows8。
Corona 网址: http://www.coronalabs.com/
翻看了一下这两个工具的文档,都是英文的,看的偶眼花缭乱。对本地存储比较好的是Phonegap,支持Android、IOS上的websql,而windows8上支持indexedDB。由于w3c力推indexedDB,以后会放弃websql,于是我依然选择indexedDB作为本地存储的数据库。
但是Phonegap只支持Android、IOS上的websql,这个该怎么办呢?
答案是写一个中间适配的层,上层应用调用的是indexedDB的接口,通过这个中间层适配,在Android、IOS上下层会调用websql,而在windows8上调用的是indexedDB。这样不就解决了问题了吗。
为了避免重复制造轮子,我先google了一番,发现居然还真有人和我的想法一样,是个老外写的js库:IndexedDBShim.js 。我把它下载下来测试了一下,出来了一大堆问题,使用不了,其中一个最大的问题就是:
SECURITY_ERR: DOM Exception 18
出错地方是函数function openDB(oldVersion)中的这一句:
var db = window.openDatabase(name, 1, name, DEFAULT_DB_SIZE);
我们可以把该函数修改成Phonegap的接口调用方式,代码如下:
function openDB(oldVersion){
document.addEventListener("deviceready", onDeviceReady_db, false);
function onDeviceReady_db() {
var db = window.openDatabase(name, 1, name, DEFAULT_DB_SIZE);
req.readyState = "done";
if (typeof version === "undefined") {
version = oldVersion || 1;
}
if (version <= 0 || oldVersion > version) {
idbModules.util.throwDOMException(0, "An attempt was made to open a database using a lower version than the existing version.", version);
}
db.transaction(function(tx){
tx.executeSql("CREATE TABLE IF NOT EXISTS __sys__ (name VARCHAR(255), keyPath VARCHAR(255), autoInc BOOLEAN, indexList BLOB)", [], function(){
tx.executeSql("SELECT * FROM __sys__", [], function(tx, data){
var e = idbModules.Event("success");
req.source = req.result = new idbModules.IDBDatabase(db, name, version, data);
if (oldVersion < version) {
// DB Upgrade in progress
sysdb.transaction(function(systx){
systx.executeSql("UPDATE dbVersions set version = ? where name = ?", [version, name], function(){
var e = idbModules.Event("upgradeneeded");
e.oldVersion = oldVersion;
e.newVersion = version;
req.transaction = req.result.__versionTransaction = new idbModules.IDBTransaction([], 2, req.source);
idbModules.util.callback("onupgradeneeded", req, e, function(){
var e = idbModules.Event("success");
idbModules.util.callback("onsuccess", req, e);
});
}, dbCreateError);
}, dbCreateError);
} else {
idbModules.util.callback("onsuccess", req, e);
}
}, dbCreateError);
}, dbCreateError);
}, dbCreateError);
}
}
我写了一些测试代码,无非就是简单的增删查改。测试都顺利通过了。整个项目的代码我作为附件上传了,自己在下面下载吧。是在Android平台下,Eclipse开发工具的。要运行查看只需要到Android的开发官网下载ADT,打开项目就可以查看到运行结果了。
- YSSS.7z (1.5 MB)
- 描述: indexedDB跨平台框架
- 下载次数: 22
分享到:
相关推荐
但是如果在浏览器上需要用到数据库一般会使用Indexed DB数据库,webSQL基本上已经废弃了,具体原因小伙伴可以下来自己查查。 IndexedDB 是一种底层 API,用于在客户端存储大量的结构化数据(也包括文件/二进制大型...
IndexedDB 基本使用
前段时间项目需要本地存储聊天数据,使用到indexedDB,经查阅大量文章,终于完成。感觉网上indexedDB的文章不够多,也不够完善,因此把代码分享出来,帮助需要的小伙伴。
indexeddb-promiseIndexedDB的所有操作都是异步的,API都是在回调函数中执行的,为了便于对其进行操作,使用ES6中的Promise来封装。1. 安装npm包// use npmnpm install --save-dev indexeddb-promise// use yarnyarn...
在Windows设备上使用 在iOS设备上使用 可以选择通过替换设备上的本机IndexedDB 可以选择在设备上增强本机IndexedDB 这个插件基本上是一个IndexedDB-to-WebSql适配器 安装 通过安装。 对于Cordova CLI 4.x ,请...
一个本地数据库(Web SQL IndexedDB)实现的通信录;介绍怎样创建打开数据库,创建表,添加数据,更新数据,删除数据,删除表 等等。
非常简单的indexedDB例子,自己按照书上面写的, 用的是 visual studio 2012 做的 mvc3 程序。
解压即用。解压即用。解压即用。解压即用。解压即用。解压即用。解压即用。
html5 indexeddb 存储
使用 IndexedDB 和缓存提高性能这是 LinkedIn 学习课程使用 IndexedDB 和缓存提高性能的存储库。 完整课程可从。 随着开发人员努力创建高效工作且可以容忍不可靠网络连接的 Web 应用程序,缓存和本地存储方法变得...
一个超级简单小型的,基于promise采用IndexedDB的健值存储
IndexedDB是一种能在浏览器中持久的存储结构化数据的对象数据库,并且为web应用提供了丰富的查询能力。 相比于Web SQL数据库它更加简单,而且官方标准中关于Web SQL的工作已经停止。 相比于Web Storage,IndexedDB...
Dexie.js基本使用——前端大容量存储IndexedDB 的包装库,可运行代码
IndexedDB详细
ngx-indexed-db ngx-indexed-db是一项服务,结合了ngx-indexed-db ,将IndexedDB数据库包装在Angular服务中。安装$ npm install ngx-indexed-db或者$ yarn add ngx-indexed-db用法导入NgxIndexedDBModule并启动它: ...
用于管理您的客户端缓存,是IndexedDB微小封装支持版本控制和max age
lovefield 是建立在 IndexedDB 上的关系查询引擎。它提供了类似 SQL 的语法,并且可以跨浏览器工作(目前支持 Chrome 37 及以上版本,Firefox 31 及以上版本,IE 10 及以上版本)。示例代码:<!doctype html> <...
NULL 博文链接:https://liuna718-163-com.iteye.com/blog/2178433
浏览器端 indexed db 封装成更简洁易操作的接口, 数据库变化监控!