IT技术博客大学习 共学习 共进步

HTML5本地存储初探(二)

Time Machine 2010-04-14 13:38:54 累计浏览 5,066 次

完成了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. HTML5 离线缓存-manifest简介 (累计阅读 16,963)
  2. HFile存储格式 (累计阅读 15,823)
  3. 我对技术方向的一些反思 (累计阅读 11,145)
  4. 淘宝图片存储架构 (累计阅读 10,845)
  5. 海量小文件存储 (累计阅读 9,705)
  6. HBase技术介绍 (累计阅读 7,944)
  7. 存储基础知识之——硬盘接口简述 (累计阅读 7,407)
  8. 面向移动设备的HTML5开发框架梳理 (累计阅读 7,204)
  9. JavaScript,只有你想不到 (累计阅读 6,165)
  10. 如果用户在5分钟内重复上线,就给他发警告,问如何设计? (累计阅读 5,885)