热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PhoneGap学习笔记(五)本地数据库WEBSQL、localStorage和sessionStorage

WEBSQL允许我们在客户端创建小型数据库。它本身是一个Sqlite嵌入式数据库一、打开或创建一个数据库vardbwindow.openDatabase(testDB,1.0

WEB SQL允许我们在客户端创建小型数据库。它本身是一个Sqlite嵌入式数据库

一、打开或创建一个数据库

var db = window.openDatabase("testDB","1.0","testDB",100000,function(){});

该方法打开一个数据库,如果数据库不存在则创建一个数据并返回数据库示例,接收5个参数

第一个:数据库名称

第二个:版本

第三个:数据库显示名称或描述

第四个:数据库大小

第五个:创建回调(该参数非必须)

二、事务

db.transaction(function(tx){},function(error){},function(){});

开始事务包含三个参数,其中第一个参数为必须参数,第二、三个参数为非必须。

第一个参数:必须,执行事务的方法,自动传入事务对象

第二个参数:事务执行失败的回调

第三个参数:事务执行成功的回调

通过事务的executeSql(sql,args,function(tx,resultSet){},function(tx,error){})执行SQL语句,该方法包含四个参数,其中第一个参数为必须,后面三个位非必须

第一个参数:需要执行的sql语句

第二个参数:sql语句中的占位符?的执行参数(如果sql语句中包含了“?”占位符,则该参数为必须参数,多个参数使用数组一一对应)

第三个参数:执行成功回调,该回调传回两个参数,第一个为事务对象,第二个为结果集(如果有返回结果集的查询,参数必须)

第四个参数:执行错误回调

三、关于executeSql中的成功回调函数

executeSql执行成功后的回调函数会传入两个参数tx和resultSet,其中tx是事务对象,resultSet则包含三个属性,分别是insertId,rowsAffected,rows,执行不同SQL语句,这三个属性值也不相同。

insertId:这是执行INSERT语句时插入行的ID。其余情况尝试读取该属性会有异常抛出:

Uncaught InvalidAccessError: Failed to read the 'insertId' property from 'SQLResultSet': The query didn't result in any rows being added.

rowsAffected:被SQL语句影响的行的个数,如果没有任何改变返回0

rows:查询是返回的结果集,该属性为一个对象,包含两个属性,length和item,遍历如下(假设结果集中包含一列名叫name)

for(var i=0,len=rows.length;i

   var name=rows.item(i).name

}

四,关于id自增长、主键和数据类型

设置一列为主键并自增长:“id INTEGER PRIMARY KEY AUTOINCREMENT”

如:CREATE TABLE IF NOT EXISTS tUser(id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR)

SQLite字段无数据类型,定义列时可忽略数据类型,无论定义成INTEGER、VARCHAR还是TEXT,它们的保存方式都是字符串,但有个特殊情况,即设置某一列为自增长时,必须

指定该列数据类型为INTEGER,其它情况依然建议写上合适的数据类型,虽然无效但是便于同其它程序员交流。

 

完整示例:

1 <div id&#61;"msg">div>

1 var msg&#61;document.getElementById("msg");
2 init();
3 function init(){
4 var db &#61; window.openDatabase("testDB","1.0","testDB",100000);//打开数据库
5 initDB(db);
6 insertData(db);
7 updateData(db);
8 findDate(db);
9
10 }
11 //创建数据表
12 function initDB(db){
13 db.transaction(function(tx){
14 var sql&#61;"CREATE TABLE IF NOT EXISTS tUser(id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR)";
15 tx.executeSql(sql,[],function(){},function(tx,err){console.log(tx);console.log(err);});
16 });
17 }
18 //插入数据
19 function insertData(db){
20 db.transaction(function(tx){
21 tx.executeSql("INSERT INTO tUser(name) VALUES(?);",[&#39;小米&#39;],function(){},function(tx,err){console.log(err);});
22 tx.executeSql("INSERT INTO tUser(name) VALUES(?);",[&#39;小明&#39;],function(tx,resultSet){console.log(resultSet);});
23 },function(errormsg){
24 console.log(errormsg);
25 });
26 }
27 //修改数据
28 function updateData(db){
29 db.transaction(function(tx){
30 tx.executeSql("UPDATE tUser SET name&#61;? WHERE id&#61;?",[&#39;小明2&#39;,2]);
31 });
32 }
33 //查询数据
34 function findDate(db){
35 db.transaction(function(tx){
var sql&#61;"SELECT * FROM tUser";
//var sql&#61;"SELECT * FROM tUser LIMIT 0,3"//同mysql一致的limit查询&#xff0c;limit第二个参数传入-1表示查询到记录末尾
36 tx.executeSql(sql,[],function(tx,resultSet){
37 var rows &#61; resultSet.rows;
38 var str&#61;"";
39 for(var i&#61;0,len&#61;rows.length;i){
40 str&#61;str&#43;rows.item(i).id&#43;":"&#43;rows.item(i).name&#43;"
"
41 }
42 msg.innerHTML&#61;str;
43 });
44 });
45 }

结果&#xff1a;

localStorage和sessionStorage的方法一样&#xff0c;唯一不同的是localStorage的数据可以持久存储而sessionStorage的数据在关闭浏览器后会被清除

保存数据的方式有三种&#xff0c;这三种方式的结果都是一致的

var localStorage&#61;window.localStorage;
localStorage.setItem(
"key1","value1");
localStorage.key2
&#61;"value2";
localStorage[
"key3"]&#61;"value3";

读取方式也有三种&#xff0c;无论用哪种方式保存&#xff0c;都可以用以下三种方式之一读取

1 localStorage.getItem("key1");
2 localStorage.key1;
3 localStorage["key1"];

localStorage.key(i):返回第i处的key&#xff0c;如果没有返回null

localStorage.removeItem("key1");移除key对应的键值对

localStorage.clear();清除所有键值对

localStorage.length;获取localStorage键值对的数量

本文地址&#xff1a;http://www.cnblogs.com/wangjiajun/p/4054323.html 

转:https://www.cnblogs.com/wangjiajun/p/4054323.html



推荐阅读
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • 本文介绍了一个Magento模块,其主要功能是实现前台用户利用表单给管理员发送邮件。通过阅读该模块的代码,可以了解到一些有关Magento的细节,例如如何获取系统标签id、如何使用Magento默认的提示信息以及如何使用smtp服务等。文章还提到了安装SMTP Pro插件的方法,并给出了前台页面的代码示例。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 1.官网下载了mysql-5.7.17-win64.zip包,配置遇到很多麻烦,记录一下;2.解压后放到指定的文件夹,修改mysql-5.7.17的配置文件my-default.i ... [详细]
  • 浅析Mysql数据回滚错误的解决方法_PHP教程:MYSQL的事务处理主要有两种方法。1、用begin,rollback,commit来实现begin开始一个事务rollback事 ... [详细]
author-avatar
杨祐书2257
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有