日期:2014-05-16  浏览次数:20427 次

HTML5 本地数据库

本地数据库的基本概念

在HTML5中,添加了很多功能来将原本必须要保存在服务器上的数据转为保存在客户端本地,从而提高了Web应用程序的性能,减轻了服务器端的负担。在这其中,一项非常重要的功能就是数据库的本地存储功能。在HTML5中内置了一个可以通过SQL语言来访问的数据库。

现在,这种不需要存储在服务器上的,被称为“SQLLite”的文件型SQL数据库已经得到了广泛的利用,所以HTML5中也采用了这种数据库来作为本地数据库,要使用SQLLite数据库,编写JavaScript脚本的步骤包括:

  1. 创建访问数据库的对象;
  2. 使用事务处理。

首先,必须使用openDatabase()方法来创建一个访问数据库的对象,该方法的使用方法所下所示:

var db = openDatabase(dbName, verNo., desc, size);

该方法使用四个参数,第一个参数为数据库名,第二个参数为版本号,第三个参数为数据库的描述,第四个参数为数据库的大小。该方法返回创建后的数据库的访问对象,如果该数据库不存在,则创建该数据库。

实际访问数据库的时候,还需要调用transaction()方法,用来执行事务处理。使用事务处理,可以防止在对数据库进行访问及执行有关操作的时候受到外界打扰。因为在Web上,同时会有许多用户都在对页面进行访问。如果在访问数据库的过程中,正在操作的数据被别的用户给修改的话,会引起很多意想不到的后果。因此,可以使用事务来达到在操作完了之前,阻止别的用户访问数据库的目的。

transaction()方法的使用方法如下:

db.transaction(function(tx) {
    tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, Log)');
});

该方法使用一个回调函数为参数。在这个函数中,执行访问数据库的语句。

用executeSql来执行查询

executeSql()方法的完整定义如下:

transaction.executeSql(sqlquery, [], dataHandler, errorHandler);

该方法使用四个参数,第一个参数为需要执行的SQL语句;第二个参数为SQL语句中所有使用到的参数的数组。在executeSql()方法中,将SQL语句中所要使用到的参数先用“?”代替, 然后依次将这些参数组成数组放在第二个参数中,例如:

transaction.executeSql('UPDATE people SET age=? WHERE name=?;', [age, name]);

第三个参数为执行SQL语句成功时调用的回调函数。该回调函数的传递方法如下所示:

function dataHandler(transaction, results) {
    // 执行SQL语句成功时的处理。
}

该回调函数使用两个参数,第一个参数为transaction对象,第二个参数为执行查询操作时返回的查询到的结果数据集对象。

第四个参数为执行SQL语句出错时调用的回调函数。该回调函数的传递方法如下所示:

function errorHandler(transaction, errmsg) {
    // 执行SQL语句出错时的处理。
}

该回调函数使用两个参数,第一个参数为transaction对象,第二个参数为执行SQL语句发生错误时的错误信息文字。

结果数据集对象有一个rows属性,其中保存了查询到的每条记录,记录的条数可以用rows.length来获取。可以用for循环,用rows[index]或rows.Item([index])的形式来依次取出每条数据。在JavaScript脚本中,一般采用rows[index]的形式。

1 楼 liang3307 2012-03-15  
好,我们也在使用html5,其中为了离线可以完全访问,把服务端数据存放到sqlite中。但是这种回调的写法,没法对批次数据进行事务控制,不知道作者有什么好的方法?