IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

HTML5本地存储初探(二)

Time Machine 2010-04-14 13:38:54 累计浏览 5,216 次
本机暂存

完成了UI,我们就需要对数据进行处理了。

在开始“数据”的本地存储之前,我们先来了解一下client-side database storage API:

the client-side database storage API allows web applications to store structured data locally using a medium many web developers are already familiar with - SQL.--webkit blog

目前只有webkit核心的浏览器支持这一特性。你甚至都不能在w3c的html5工作草案中找到 (cs-db)client-side database 的详细描述。

首先我们要尝试建立一个数据库链接:

以下是代码片段:
try {
    if(!window.openDatabase){  //检测浏览器是否支持cs-db
        alert(’not supported cs-db!’);
    } else {
        var shortName = ’noteDB’;
        var version = ’1.0’;
        var displayName = ’Note book database’;
        var maxSize = 65536;
                //创建一个数据库
        var db = openDatabase(shortName,version,displayName,maxSize);
    }
} catch(e){  //尝试捕获错误
    if (e == 2){
        alert(’Invalid database version.’);
    } else {
        alert("Unknown error "+e+".");
    }
}
如果以上代码无误,你就会在safair或者chrome的开发者工具中看到这个数据库:

创建的数据库

在右侧区域可以直接执行一些sql查询,但是我总是得到 “发生意外错误“0”。” 这样的结果,不知道是不是RP的问题。

接下来就是创建表,以及执行一些sql语句进行增删改查。

js执行sql的基本语法大致是这样的:

以下是代码片段:
db.transaction(
    function (transaction){
        transaction.executeSql(sqlquery,[],dataHandler, errorHandler);
    }
);

其中transaction.executeSql中参数依次为:sql查询字符串,传递给sql查询的参数,数据处理句柄,错误处理句柄。其中只有第一项为必选,其余都为可选项。

第二个参数的用法大致是这样的:

以下是代码片段:
transaction.executeSql("UPDATE people set age=? where name=?;",[ age, name ]);

查询字符串中的“ ?” 会被后面数组中的变量依次替换。

注意:以上我用了“大致”这个词,因为没有官方的文档W3C-web database),只是从一些其它文献以及自己判断得来,若有错误还请指正。

下面我们创建一张用来存储note的表:

以下是代码片段:
db.transaction(
    function (transaction){
        transaction.executeSql(
                ’CREATE TABLE IF NOT EXISTS notes (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,titel TEXT, note TEXT NOT NULL, date DATE);’,errorHandler);
    }
);

errorHandler是这样的:

以下是代码片段:
function errorHandler(transaction, error){
    alert(’Error was: ’+ error.message +’(Code:’+ error.code +’)’);

    var fatal_error = true;
    if(fatal_error){
        return true;
    }
    return false;
}

error.message 是一段错误描述,error.code 是错误代码 (详情)

再看看如果从db中检索出数据并显示到页面上:

以下是代码片段:
db.transaction(
    function (transaction){
        transaction.executeSql("SELECT * from notes;",[],dataHandler, errorHandler);
    }
);

function dataHandler(transaction, results){
    var string = "";
    for (var i = 0; i" + row[’titel’] + "

";
    }
    var listConts = $(’listCont’);
    listConts.innerHTML = string;
}

可以看出,基本上和php之类后端语言操作大同小异。
更多代码可查看示例程序,不再一一罗列。

搞定了数据的本地存储之后,接下来就要看看如何将文件储存到本地。

同分类推荐文章

  1. translateZ() (2026-06-25 21:18:56)
  2. translateY() (2026-06-25 21:17:56)
  3. translateX() (2026-06-25 21:16:01)

查看更多 前端 文章 →

建议继续学习

  1. HTML5 离线缓存-manifest简介 (累计阅读 17,103)
  2. HTML 5 的data-* 自定义属性 (累计阅读 14,349)
  3. jQuery的data()方法 (累计阅读 8,651)
  4. 前端必须熟悉的10个CSS3属性 (累计阅读 7,719)
  5. 面向移动设备的HTML5开发框架梳理 (累计阅读 7,418)
  6. 30个超棒的404错误页面 (累计阅读 7,301)
  7. HTML5+CSS3 loading 效果收集 (累计阅读 6,438)
  8. 给HTML初学者的30条最佳实践 (累计阅读 5,811)
  9. Phonegap + HTML5 开发经验小结 (累计阅读 5,344)
  10. HTML5文件API之图片预览 (累计阅读 5,121)