移动前端开发之数据库操作篇

在移动平台开发中,经常会有大数据存储与交互的操作,在以webkit为内核的浏览器中,提供了一个叫作WEBSQL的数据库。这让我们前端也可以像php等程序语言一样,进行数据库的读写操作。Web Storage存储本地数据的方法目前可以在许多主流浏览器、平台与设备上实现,与之相关的API也已经标准化,但是,Web Storage存储空间是有5MB,键值存储的方式带来诸多不便,未来本地存储也不仅仅是这一种方法。其中最为熟知的就是Web SQL数据库,它内置SQLite数据库,对数据库的操作可以通过调用executeSql()方法实现,允许使用JavaScript代码控制数据库。这样一来,前端应用就有了一个更为广阔的天空。

打开与创建数据库

如果要通过WebDb进行本地数据的存储,首先需要打开或创建一个数据库,打开或创建数据库的API是openDatabase,其调用的代码如下所示:

openDatabase(DbName,DBVersion,DBDescribe,DBSize,Callback());

参数分别表示数据库名称,版本号,描述,数据库大小(字节为单位),创建或打开成功后执行的回调函数。

主要用到的有如下三个方法:

 1、openDatabase:这个方法使用现有数据库或创建新数据库创建数据库对象。

  2、transaction:这个方法允许我们根据情况控制事务提交或回滚。

  3、executeSql:这个方法用于执行真实的SQL查询。

下面我们就以具体的示例进行演示。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Database API</title>
</head>
<body>
    <script type="text/javascript">
    //数据文件在谷歌浏览器下,默认存放的位置
    //"C:/Users/Administrator/AppData/Local/Google/Chrome/User Data/Default/databases/1";
        if(window.openDatabase){
            //如果test数据库存在,则打开,否则会自动创建
            var db  =  openDatabase("test", "1.0", "Database test", 1024 * 1024);
            //创建一个学生表
            var sql = ‘CREATE TABLE  if not exists "student" (‘+
                        ‘"_id"  INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,‘+
                        ‘"name"  TEXT NOT NULL,‘+
                        ‘"age"  TEXT,‘+
                        ‘"mark"  TEXT)‘;

            //写入一条数据
            var sql2 = ‘insert into student (name,age,mark) values ("frog",1,"nice frog") ‘;

            //取出一行数据
            var sql3 = ‘select * from student‘;

            //预处理语句的用法
            var sql4 = ‘insert into student (name,age,mark) values (:name,:age,:mark)‘;

           /**
            * 预处理语句在php中也有类似的用法
            * $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
            * $stmt->bindParam(‘:name‘, $name);
            * $stmt->bindParam(‘:value‘, $value);
            */
            var name = ‘aron‘;
            var age  = 29;
            var mark = ‘hello world‘;
            exec(sql,function(rs){
                //这里之所以要用回调,
                //是因为数据操作过程是异步的
                exec(sql2,function(rs){
                    exec(sql3,function(rs){
                        console.log(rs.rows.item(0))
                    })
                    exec2(sql4,[name,age,mark])
                })
            });

            //简单封装一个数据操作的方法
            function exec(sql,callback){
                db.transaction(function(tx){
                    //中间这个[],在预处理语句中绑值
                    tx.executeSql(sql,[],function(tx,rs){
                        //success
                        callback && callback(rs);
                    },function(tx,msg){
                        //error
                        console.log(msg);
                    });
                });
            }

           //支持变量邦定
           function exec2(sql,para,callback){
                para = para || [];
                db.transaction(function(tx){
                    tx.executeSql(sql,para,function(tx,rs){
                        //success
                        callback && callback(rs);
                    },function(tx,msg){
                        //error
                        console.log(msg);
                    });
                });
           }

        }

    </script>

</body>
</html>
 

以上代码另存为html文件,在谷歌浏览器上,打开控制台,可以看到运行的结果。

局限性
可惜,我测试了下程序员最喜欢用的Firefox浏览器,可惜它并不支持这种本地数据库SQLite,且有可能被indexDB所替代的趋势。

扩展阅读:http://www.2cto.com/kf/201205/130762.html

移动前端开发之数据库操作篇,布布扣,bubuko.com

时间: 2024-09-30 06:36:58

移动前端开发之数据库操作篇的相关文章

windows phone 8.1开发SQlite数据库操作详解

原文出自:http://www.bcmeng.com/windows-phone-sqlite1/ 本文小梦将和大家分享WP8.1中SQlite数据库的基本操作:(最后有整个示例的源码)(希望能通过本站广告支持小梦,谢谢!) 建立数据库 增加数据 删除数据 更改数据 查询数据 (注:为了让每个操作都能及时显示在UI上,所以进行了数据绑定.数据绑定会在后面文章专门讲解,先给出数据类Note,代表一个笔记.含有Name 和content  属性.其代码如下:如果不清楚,我会在之后讲解): names

旨在脱离后端环境的前端开发套件 - IDT Server篇

IDT,一个基于Nodejs的,旨在脱离后端环境的前端开发套件,目的就是能让前端开发完全脱离后端的环境,无论后端是什么模板引擎(主流),都能应付自如. IDT主要包括两大部分:Server + Build,这一篇主要介绍Server篇. 为了辅助前端开发,一个本地的类似于Apache的服务器是少不了的,但是有个问题,如果项目中的html,是php的smarty模板怎么办?使用纯粹的静态服务器是不行的,因为对前端开发来说,这个html必须由php的smarty模板引擎来解析,前端人员不懂php怎么

做一名合格的前端开发工程师(12篇)——第一篇 Javascript加载执行问题探索

来源:http://www.cnblogs.com/huangxincheng/archive/2011/12/04/2275988.html,感谢! 做前端开发少不了各种利器.比如我习惯用的还是Google浏览器和重型武器Fiddller. 一: 原始情况 首先大家看看如下的代码: 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" In

前端开发【第2篇:CSS】

鸡血 样式的属性多达几千个,但别担心,按照80-20原则,常用的也就几十个,你完全可以掌握它. Css初识 HTML的诞生 早期只有HTML的时候为了让HTML更美观一点,当时页面的开发者会把颜色写到标签里面,想想一下一堆标签一堆属性:颜色.字体等,总结一个字就是“乱” 为了解决这个问题,万维网联盟(W3C),这个非营利的标准化联盟,肩负起了 HTML 标准化的使命,并在 HTML 4.0 之外创造出样式(Style). 所有的主流浏览器均支持层叠样式表. CSS语法和CSS优先级 1.CSS

web前端开发笔试集锦(javascript篇1)转

原文出处: http://hi.baidu.com/jinhui04/item/eaf40034fa00def597f88dbc 1, 判断字符串是否是这样组成的,第一个必须是字母,后面可以是字母.数字.下划线,总长度为5-20 var reg = /^[a-zA-Z][a-zA-Z_0-9]{4,19}$/;reg.test("a1a__a1a__a1a__a1a__"); 2,截取字符串abcdefg的efg var str = "abcdefg";if (/e

前端开发【第6篇:JavaScript客户端(浏览器)】

Web浏览器中的JavaScript 客户端JavaScript时间线 1.Web浏览器创建Document对象,并且开始解析web页面,解析HTML元素和它门的文本内容后添加Element对象和Text节点到文档中.在这个阶段Document.readystate属性的值是“loading” 2.当HTML解析器遇到没有async和defer属性的<script>元素时,它把这些元素添加到文档中,然后执行内火外部脚本.这些脚本会同步执行,并且在脚本下载(如果需要)和执行时解析器会暂停,因为J

python 之 前端开发( DOM操作)

11.47 DOM操作 查找节点: 11.471 直接查找 document.getElementById //根据ID获取唯一一个标签 document.getElementsByClassName //根据class属性获取一系列标签 document.getElementsByTagName //根据标签名获取一系列标签 11.472 间接查找 语法 含义 childNodes 获取所有的子节点,除了元素还有文本等 children 获取所有元素子节点,不包含文本 parentNode 获

前端开发css样式基础篇

楼主比较懒,这个是看到别人写的 直接拷贝回来 尊重原著.http://www.cnblogs.com/iflygofy/archive/2016/08/01/5726479.html 里面有一些自己加上去的注释.. 颜色和单位的使用 颜色 用颜色的名字表示颜色,比如:red 用16进制表示演示 比如:#FF0000 用rgb数值表示颜色,rgb(红,绿,蓝),每个值都在0-255之间一般都用16进制表示颜色 单位 px:像素,与分辨率设置相关. %相对于浏览器的百分之多少,可以对宽度width做

前端开发【第1篇:HTML】

HTML初识 1.什么是HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏览器根据标记语言的规则去解释它. 你可能早已经注意到了这点,所有的 HTML 元素本质上是小的矩形块,代表着某一小块区域. 浏览器负责将标签翻译成用户“看得懂”的格式,呈现给用户 2.网页的组成 我们平时看到的网页一般由3个部分组成: HTML(Hypertext Marku