本地数据库

统计数据往往由一系列统计指标构成,做为统计指标的“数”和做为数学的“数”除了都是数值、具有数量性这一共同特点外,统计指标的“数”还有名称、地域、时间、计量单位和统计方法等要求。例如,“截止2005年,我国有13亿人口”这一统计指标,不只是数值“13”,而是典型的结构化数据,即,

名称:人口
国家:中国
时间:2005
单位:亿
数量:13

如果把一些国家的人口统计指标放在下表中,

各国人口统计表(单位:亿)
国家时间数量
中国200513
印度200810
日本20042.2
英国20000.66
美国20062.8

即为结构化数据数据表,按数据库术语来说,表中行为记录(Record)、列为字段(Field),每个字段都有名称(Field Name,如国家、时间、数量)何属性(字段数据特征,如国家:字符型、时间:日期型、数量:数量型),将一些存在关联的结构化数据表组合在一起(关联表集合)即为关系型数据库。

大数据时代,数据库技术是统计数据处理的基础,掌握数据库技术是目前统计工作者必备的技能。虽然Html5已经提供了功能强大的localStorage和,但是只能提供存储简单数据结构的数据,对于复杂的Web应用的数据却无能为力。令人惊喜的是Html5提供了一个浏览器端的数据库(SQLite)支持,允许我们直接通JavaScript的API在浏览器端创建和管理一个本地的数据库,而且支持标准SQL语言的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)操作,让离线的Web应用更加方便的存储结构化的数据。

1、数据结构和关系型数据库

根据数据结构,数据大致可以分为三种类型:

结构化(structured)数据
半结构化(semi-structured)数据
非结构化(unstructured)数据

这三种类型的数据可以按照数据模式(schema)进行区分。

结构化数据的模式是预先定义(schema-first),数据必须按定义的模式进行生成,当数据发生变化时需要事先对模式就行更改。可以用二维表结构来逻辑表达实现的数据,数据库中的数据表就是典型的结构化数据。

非结构化数据没有模式,不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档、文本、图片、图像和音频/视频信息等。

半结构化数据:介于完全结构化数据(如关系型数据库、面向对象数据库中的数据)和完全无结构的数据(如声音、图像文件等)之间的数据,HTML文档就属于半结构化数据。它一般是自描述的,数据的结构和内容混在一起,没有明显的区分。

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。

关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由埃德加·科德于1970年首先提出的,它是数据存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。 关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。

关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。当前主流的关系型数据库有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。

2、SQLite数据库介绍

SQLite是目前最流行的开源嵌入式数据库,SQLite 可以很好的支持关系型数据库所具备的一些基本特征,如标准SQL语法、事物、数据表和索引等。SQLite的主要特征:

I.  管理简单,甚至可以认为无需管理;
II. 操作方便,SQLite生成的数据库文件可以在各个平台无缝移植;
III.可以非常方便的以多种形式嵌入到其他应用程序中,如静态库、动态库等
IV. 易于维护。

SQLite的主要优势在于灵巧、快速和可靠性高。SQLite的设计者们为了达到这一目标,在功能上作出了很多关键性的取舍,与此同时,也失去了一些对RDBMS关键性功能的支持,如高并发、细粒度访问控制(如行级锁)、丰富的内置函数、存储过程和复杂的SQL语句等。正是因为这些功能的牺牲才换来了简单,而简单又换来了高效性和高可靠性。

在浏览器(推荐Google的Chrome浏览器)中通过JS的API在客户端操作本地数据库的最基本的步骤是:

I.  创建一个访问数据库的对象;
II. 使用第一步创建的数据库访问对象来执行transaction方法,通过此方法可以设置一个开启事务成功的事件响应方法,在事件响应方法中可以执行SQL;
III.通过executeSql方法执行查询、插入、删除等操作。

3、SQLite数据库操作实例

(1)学生基本信息数据结构

学生基本信息数据结构表
字段名称别名属性备注
学号oID整型10位
姓名oName字符型10位字符
性别oGender字符型2位字符
省份oProvince字符型10位字符
学院oCollege字符型20位字符
专业oMajor字符型50位字符
生日oBirthday日期型yyyy-mm-dd
数学oMath整型0-100的整数
英语oEnglish整型0-100的整数
政治oPolitics整型0-100的整数

(2)JavaScript API操作SQLite代码

建立或打开数据库(openDatabase方法)

var dataBase = openDatabase("student", "1.0", "学生基本信息库", 1024 * 1024, function () { });

openDatabase方法打开一个已经存在的数据库,如果数据库不存在,它还可以创建数据库。几个参数意义分别是,

数据库名称(student);
数据库的版本号,目前来说传个1.0就可以了,当然可以不填;
对数据库的描述(学生基本信息表);
设置分配的数据库的大小(单位是kb,1024 * 1024kb=1GB)。
回调函数(可省略)。

I、建立本地数据库


数据库名称  数据库描述  数据库容量 



注:测试练习过程中数据库名称"Test1"尽量不要修改,数据库容量设置为1024(1MB)即可。练习熟练后再重新设置实际的数据库名称和容量

II、建立数据表


SQL代码
CREATE TABLE IF NOT EXISTS student(
   oID INTEGER unique, 
   oName varchar(10),
   oGender varchar(2),
   oProvince varchar(10),
   oCollege varchar(20),
   oMajor varchar(50),
   oBirthday date,
   oMath INTEGER,
   oEnglish INTEGER,
   oPolitics INTEGER)

注:可将SQL代码复制粘贴到SQL代码框中,运行观看效果

SQL代码框


注:建立数据表时,数据表名"student"和字段名称自己设定,不能用中文

dataBase.transaction(function(tx) {
   context.executeSql('CREATE TABLE IF NOT EXISTS student (
   oID INTEGER unique 
   )',[],function(tx,result){webTJ.show("oShow",'创建表成功',1);},function(tx,error){webTJ.show("oShow",'创建表失败:' + error.message,1);});
});


dataBase.transaction(function(tx) {
   context.executeSql('CREATE TABLE IF NOT EXISTS student (
   oID INTEGER unique, 
   oName varchar(10),
   oGender varchar(2),
   oProvince varchar(10),
   oCollege varchar(20),
   oMajor varchar(50),
   oBirthday date,
   oMath INTEGER,
   oEnglish INTEGER,
   oPolitics INTEGER
   )',[],function(tx,result){webTJ.show("oShow",'创建表成功',1);},function(tx,error){webTJ.show("oShow",'创建表失败:' + error.message,1);});
});

III、插入记录

dataBase.transaction(function(context) {
    context.executeSql('INSERT INTO student (
        oID,
        oName,
        oGender,
        oProvince,
        oCollege, 
        oMajor,
        oBirthday,
        oMath,oEnglish,oPolitics
        ) 
    VALUES (
        19931060411,
        "郭家豪"
        "男",
        "吉林",
        "工商管理学院",
        "人力资源管理",
        "1993-10-9",
        91,64,84
        )
  ');
});

IV、记录查询

dataBase.transaction(function(context) {
  context.executeSql('SELECT * FROM testTable',[],function(context,results) {
    var len = results.rows.length, i;
        console.log('Got '+len+' rows.');
           for (i = 0; i < len; i++){
          console.log('id: '+results.rows.item(i).id);
          console.log('name: '+results.rows.item(i).name);
        }
     });

4、SQLite数据库操作命令窗口


代码窗口

代码运行效果

posted @ 2016-12-05 00:11  银河统计  阅读(623)  评论(0编辑  收藏  举报