预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共14页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Android教程之用HTML5构建Web应用程序(三)vardb={}; functionsaveAll(){ db=window.openDatabase("venueDb","1.0","VenueDatabase",1000000); db.transaction(function(txn){ txn.executeSql("CREATETABLEvenue(idINTEGERNOTNULLPRIMARYKEY,"+ "nameNVARCHAR(200)NOTNULL,addressNVARCHAR(100), cross_streetNVARCHAR(100),"+ "cityNVARCHAR(100),stateNVARCHAR(20),geolatTEXTNOTNULL,"+ "geolongTEXTNOTNULL);"); });allVenues.forEach(saveVenue); countVenues(); } functionsaveVenue(venue){ //checkifwealreadyhavethevenue db.transaction(function(txn){ txn.executeSql("SELECTnameFROMvenueWHEREid=?",[venue.id], function(t,results){ if(results.rows.length==1&&results.rows.item(0)['name']){ console.log("Alreadyhavevenueid="+venue.id); }else{ insertVenue(venue); } }) }); }functioninsertVenue(venue){ db.transaction(function(txn){ txn.executeSql("INSERTINTOvenue(id,name,address,cross_street,"+ "city,state,geolat,geolong)VALUES(?,?,?,?,"+ "?,?,?,?);",[venue.id,venue.name, venue.address,venue.crossstreet,venue.city,venue.state, venue.geolat,venue.geolong],null,errHandler); }); }functioncountVenues(){ db.transaction(function(txn){ txn.executeSql("SELECTCOUNT(*)FROMvenue;",[],function(transaction,results){ varnumRows=results.rows.length; varrow=results.rows.item(0); varcnt=row["COUNT(*)"]; alert(cnt+"venuessavedlocally"); },errHandler); }); }要将场所数据保存到数据库,先要创建一个用来存储数据的表。创建表的语法是非常标准的SQL语法。(所有支持数据库的浏览器均使用SQLite。查阅SQLite文档获得受支持的数据类型、限制等。)SQL执行异步完成。此外,还会调用事务函数并向其传递一个回调函数。callback函数获得一个事务对象,用来执行SQL。executeSQL函数接受一个SQL字符串,然后是一个可选的参数列表,外加成功和错误处理器函数。如果没有错误处理器,错误就被“吃掉”。对于createtable语句而言,这是一种理想状况。脚本首次执行时,此表将会被成功创建。当再次执行时,脚本将会失败,因为表已经存在—但这也问题不大。因为我们只需要确保在向表内插入行之前,此表已经存在。 此表创建后,通过forEach函数用从Foursquare返回的每个场所调用saveVenue函数。此函数先是通过查询这个场所来查证这个场所是否已经被存储在本地。这里,使用了一个成功处理器。查询的结果集将被传递给这个处理器。如果没有结果或场所尚未被存储于本地,就会调用insertVenue函数,由它执行一个插入语句。 借助saveAll,在所有的保存/插入完成后,调用countVenues。目的是查询插入到这个场所表内的行的总数。这里的语法(row["COUNT(*)"])从查询的结果集中拉出该计数。 了解了如何使用数据库支持(如果有的话)后,接下来的一节将会探讨如何使用Webworker支持。 Webworker的后台处理 回到清单6,让我们对它进行稍许修改。如下面的清单9所示,检测是否有Webworker支持。如果有,就用它来