- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
HTML 5离线存储之Web SQL
本篇没有考虑异步,多线程及SQL注入
WebDatabase 规范中说这份规范不再维护了,原因是同质化(几乎实现者都选择了Sqlite),
且不说这些,单看在HTML5中如何实现离线数据的CRUD,最基本的用法(入门级别)
1,打开数据库
2,创建表
3,新增数据
4,更新数据
5,读取数据
6,删除数据
事实上,关键点在于如何拿到一个可执行SQL语句的上下文,
像创建表,删除表,CRUD操作等仅区别于SQL语句的写法.OK,貌似SqlHelper啊,换个名字,dataBaseOperator就它了
executeReader,executeScalar两个方法与executeNonQuery严重同质,
下边的代码产生定义了我们的dataBaseOperator类,第二行
3-5行则定义打开数据库连接方法,类方法,效果类似C#中的静态方法,直接类名.方法调用
6-15行则定义executeNonQuery方法,意指查询数据库,与executeReader方法和executeScalar方法同质,均可返回记录集
整个 dataBaseOperator就完整了,很简单,唯一要指出的是,测试以下代码时请选择一个支持HTML5的浏览器!如Google Chrome
//TODO;SQL注入? ?
??function?dataBaseOperator()?{};? ?
?dataBaseOperator.openDatabase?=?function?()?{? ?
?????return?window.openDatabase(dataBaseUserStories,?1.0,?dataBase?used?for?user?stories,?2?*?1024?*?1024);? ?
?}? ?
?dataBaseOperator.executeNonQuery?=?function?(sql,?parameters,?callback)?{? ?
?????var?db?=?this.openDatabase();? ?
?????db.transaction(function?(trans)?{? ?
?????????trans.executeSql(sql,?parameters,?function?(trans,?result)?{ ?
?????????????callback(result); ?
?????????},?function?(trans,?error)?{ ?
?????????????throw?error.message; ?
?????????}); ?
?????}); ?
?} ?
?dataBaseOperatordataBaseOperator.executeReader?=?dataBaseOperator.executeNonQuery; ?
?dataBaseOperatordataBaseOperator.executeScalar?=?dataBaseOperator.executeNonQuery;?
有了SqlHeper,再看业务处理层(Business Logic Layer)
业务处理类包括了创建表,删除表,新增记录,删除记录以及读取记录,这里没有写更新,实际上先删后增一样滴,即使要写也不复杂
function?userStoryProvider()?{? ?
?????this.createUserStoryTable?=?function?()?{? ?
?????????dataBaseOperator.executeNonQuery(CREATE?TABLE?tbUserStories(id?integer?primary?key?autoincrement,role,ability,benefit,name,importance,estimate,notes));? ?
?????};? ?
?????this.dropUserStoryTable?=?function?()?{? ?
?????????dataBaseOperator.executeNonQuery(DROP?TABLE?tbUserStories);? ?
?????};? ?
?????this.addUserStory?=?function?(role,?ability,?benefit,?name,?importance,?estimate,?notes)?{? ?
?????????dataBaseOperator.executeNonQuery(INSERT?INTO?tbUserStories(role,ability,benefit,name
文档评论(0)