第七章节HTML5的数据存储
典型的数据库API的用法,涉及打开数据库,然后执行一些SQL。但是需要注意的是如果使用服务器端的一个数据库的话,通常还要关闭数据库连接。 1.打开和创建数据库 通过初次打开一个数据库,就会创建数据库。在任何时间,在该域上只能拥有指定数据库的一个版本,因此如果你创建了版本1.0,那么应用程序在没有特定地改变数据库的版本时,将无法打开1.1。 打开和创建数据库必须使用openDatabase方法来创建一个访问数据库的对象。该方法的使用方法如下。 var db=openDatabase( 'db', '1.0' , 'first database',2*1024*1024); 该方法使用四个参数,第一个参数为数据库名,第二个参数为版本号,第三个参数为数据库的描述,第四个参数为数据库的大小。该方法返回创建后的数据库访问对象,如果该数据库不存在,则创建该数据库。 为了确保应用程序有效,并且检测对Web SQL数据库API的支持,还应该测试浏览器对数据库的支持,所以要进行测试,测试代码如下。 var db; if(window.openDatabase){ db = openDatabase('mydb', '1.0' , 'My first database',2*1024*1024); } 7.2.2 Web SQL Database API的使用 2.创建数据表 实际访问数据库的时候,还需要使用transaction方法,用来执行事务处理。使用事务处理,可以防止在对数据库进行访问及执行有关操作的时候受到外界的打扰。因为在Web上,同时会有许多人都在对页面进行访问。如果在访问数据库的过程中,正在操作的数据被别的用户给修改掉得话,会引起很多意想不到的后果。因此,可以使用事务来达到在操作完了之前,阻止别的用户访问数据库的目的。 transaction方法的使用方法如下。 db.transaction(function(tx)){ tx.executeSql('CREATE TABLE tweets(id,date,tweet)'); }); transaction方法使用一个回调函数为参数。在这个函数中,执行访问数据库的语句。 要创建数据表(以及数据库上的任何其他事务),必须启动一个数据库“事务”,并且在回调中创建该表。事务回调接受一个参数,其中包含了事务对象,这就是允许运行SQL语句并且运行 executeSql方法(在下面的例子中,就是tx)的内容。这通过使用从openDatabase返回的数据库对象来完成,并且像下面这种调用事物的方法如下。 var db; if(window.openDatabase){ db = openDatabase('mydb', '1.0' , 'My first database',2*1024*1024); db.transaction(function(tx)){ tx.executeSql('CREATE TABLE tweets(id,date,tweet)'); }); } 3.插入和查询数据 接下来,我们来看一下在transaction的回调函数内,到底是怎样访问数据库的。这里,使用了作为参数传递给回调函数的transaction对象的executeSql方法。 executeSql方法的完整定义如下。 transaction.executeSql(sqlquery,[],dataHandler,errorHandler); 该方法使用四个参数,第一个参数为需要执行的SQL语句。 第二个参数为SQL语句中所有使用到的参数的数组。在executeSql方法中,将SQL语句中所要使用到的参数先用“?”代替,然后依次将这些参数组成数组放在第二个参数中,如下。 transaction.executeSql("UPDATE user set age=? where name=?;",[age,name]); 第三个参数为执行sql语句成功时调用的回调函数。该回调函数的传递方法如下。 function dataHandler(transaction,results){//执行SQL语句成功时的处理}; 该回调函数使用两个参数,第一个参数为transaction对象,第二个参数为执行查询操作时返回的查询到的结果数据集对象。 第四个参数为执行SQL语句出错时调用的回调函数。该回调函数的传递方法如下。 function errorHandler(transaction,errmsg){//执行SQL语句出错时的处理}; 该回调函数使用两个参数,第一个参数为transaction对象,第二个参数为执行发生错误时的错误信息文字。