• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > HTML 5离线存储之Web SQL

HTML 5离线存储之Web SQL

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含HTML5教程,HTML5中国,HTML 5离线存储之Web SQL,admin,html5资料,html5文章,htm等相关知识,匿名希望在学习及工作中可以帮助到您
本篇没有考虑异步,多线程及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

  1. //TODO;SQL注入
  2. function dataBaseOperator() {};
  3. dataBaseOperator.openDatabase = function () {
  4. return window.openDatabase("dataBaseUserStories", "1.0", "dataBase used for user stories", 2 * 1024 * 1024);
  5. }
  6. dataBaseOperator.executeNonQuery = function (sql, parameters, callback) {
  7. var db = this.openDatabase();
  8. db.transaction(function (trans) {
  9. trans.executeSql(sql, parameters, function (trans, result) {
  10. callback(result);
  11. }, function (trans, error) {
  12. throw error.message;
  13. });
  14. });
  15. }
  16. dataBaseOperatordataBaseOperator.executeReader = dataBaseOperator.executeNonQuery;
  17. dataBaseOperatordataBaseOperator.executeScalar = dataBaseOperator.executeNonQuery;

有了"SqlHeper",再看业务处理层(Business Logic Layer)

业务处理类包括了创建表,删除表,新增记录,删除记录以及读取记录,这里没有写更新,实际上先删后增一样滴,即使要写也不复杂

  1. function userStoryProvider() {
  2. this.createUserStoryTable = function () {
  3. dataBaseOperator.executeNonQuery("CREATE TABLE tbUserStories(id integer primary key autoincrement,role,ability,benefit,name,importance,estimate,notes)");
  4. };
  5. this.dropUserStoryTable = function () {
  6. dataBaseOperator.executeNonQuery("DROP TABLE tbUserStories");
  7. };
  8. this.addUserStory = function (role, ability, benefit, name, importance, estimate, notes) {
  9. dataBaseOperator.executeNonQuery("INSERT INTO tbUserStories(role,ability,benefit,name,importance,estimate,notes) SELECT ?,?,?,?,?,?,?",
  10. [role, ability, benefit, name, importance, estimate, notes], function (result) {
  11. //alert("rowsAffected:" + result.rowsAffected);
  12. });
  13. };
  14. this.removeUserStory = function (id) {
  15. dataBaseOperator.executeNonQuery("DELETE FROM tbUserStories WHERE id = ?", [id], function (result) {
  16. //alert("rowsAffected:" + result.rowsAffected);
  17. });
  18. };
  19. this.loadUserStories = function (callback) {
  20. dataBaseOperator.executeReader("SELECT * FROM tbUserStories", [], function (result) {
  21. callback(result);
  22. });
  23. //result.insertId,result.rowsAffected,result.rows24 };
  24. }

createUserStoryTable,dropUserStoryTable,addUserStory,removeUserStory又是严重同质,不说了,仅SQL语句不同而已

但loadUserStories与上述四个方法均不同,是因为它把SQLResultSetRowList返回给了调用者,这里仍然是简单的"转发",页面在使用的时候需要首先创建provider实例(使用类似C#中的类实例上的方法调用)

  1. var _userStoryProvider = new userStoryProvider();

之后就可以调用该实例的方法了,仅举个例子,具体代码省去

  1. function loadUserStory() {
  2. try {
  3. _userStoryProvider.loadUserStories(function (result) {
  4. var _userStories = new Array();
  5. for (var i = 0; i < result.rows.length; i++) {
  6. var o = result.rows.item(i);
  7. var _userStory = new userStory(o.id, o.name, o.role, o.ability, o.benefit, o.importance, o.estimate, o.notes);
  8. _userStories.push(_userStory);
  9. }//...
  10. } catch (error) {
  11. alert("_userStoryProvider.loadUserStories:" + error);
  12. }}

得到_userStories这个数组后,就没有下文了,是自动创建HTML还是绑定到EXT,发挥想象力吧...继续

userStory是一个自定义的"Model" "类"·

  1. function userStory(id, name, role, ability, benefit, importance, estimate, notes) {
  2. this.id = id;
  3. this.name = nam

您可能想查找下面的文章:

  • 一款利用html5和css3动画排列人物头像的实例演示
  • html5教程调用绘图api画简单的圆形代码分享
  • html5教程画矩形代码分享
  • html5教程制作简单画板代码分享
  • html5基础教程常用技巧整理
  • html5教程-Canvas入门
  • html5教程画矩形代码分享
  • HTML5晃动DeviceMotionEvent事件
  • HTML5教程之html 5 本地数据库(Web Sql Database)
  • HTML5中对contenteditable属性的解释与规定

相关文章

  • 2018-12-03在国内前端领域里优秀的人很多,为什么没人做出 angularjs 、jQuery 之类优秀的框架?
  • 2018-12-03如何使用 HTML5 技术适配不同分辨率的设备?
  • 2018-12-03如何使用canvas实现图片马赛克
  • 2018-12-03html5中返回AudioTrackList对象的属性audioTracks
  • 2018-12-03详解HTML5幻灯片系统--H5Slides
  • 2017-08-06使用phonegap创建联系人的实现方法
  • 2018-12-03html5中关于新增的几个背景属性和文本属性介绍
  • 2018-12-03用HTML5.0制作网页的教程_html5教程技巧
  • 2018-12-03[html5游戏开发]数独游戏-完整算法-开源讲座
  • 2017-08-06完美解决IE8下不兼容rgba()的问题

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • html5 的a标签 Href 拨电话的写法
    • 基于第一个PhoneGap(cordova)的应用详解 _html5教程技巧
    • 分享一个HTML5电子杂志翻书特效代码
    • 简单整理HTML5的基本特性和语法
    • html5指南-3.如何实现html元素拖拽功能
    • html5移动端Meta的设置
    • HTML5 游戏移植为 iOS 原生应用,需要注意哪些地方?有什么经验可以分享?
    • [HTML5代码艺术]17行代码的贪吃蛇小游戏
    • H5语义标签实际案例
    • 解决HTML5新标签的浏览器兼容性问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有