数据库引擎开发
⑴ 什么是数据库引擎
1、引擎(engine)能够决定程序管理和数据操作的程序或程序段。数据库引擎就是操作数据库的一段程序或程序段。 比如:在VB中,用microsoft jet数据库引擎和数据访问对象DAO(data access object)可以创建功能强大的客户/服务器应用程序。2、面试题吧,ADO、ODBC、MICROSOFT JET都是,ASP不是。
⑵ 数据库(mysql)关键知识
Mysql是目前互联网使用最广的关系数据库,关系数据库的本质是将问题分解为多个分类然后通过关系来查询。 一个经典的问题是用户借书,三张表,一个用户,一个书,一个借书的关系表。当需要查询某个用户借书情况或者是书被那些人借了,就用关系查询来实现。
关系数据库范式
来自英文Normal form,简称NF。要想设计—个好的关系,必须使关系满足一定的约束条件,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。总共有六种范式:第一范式(1NF)、第二范式(2NF)、 第三范式 (3NF)、巴斯-科德范式(BCNF)、 第四范式 (4NF)和 第五范式 (5NF,又称完美范式)。
1NF是指数据库表的每一列都是不可分割的原子数据项。2NF必须满足1NF,要求数据库表中的每行记录必须可以被唯一地区分。3NF在2NF基础上,任何非主 属性 不依赖于其它非主属性(在2NF基础上消除传递依赖)。BCNF是在3NF基础上,任何非主属性不能对主键子集依赖(在3NF基础上消除对主码子集的依赖), 满足BCNF不再会有任何由于函数依赖导致的异常,但是我们还可能会遇到由于多值依赖导致的异常。4NF的定义很简单:已经是BC范式,并且不包含多值依赖关系。5NF处理的是无损连接问题,这个范式基本没有实际意义,因为无损连接很少出现,而且难以察觉。而域键范式试图定义一个终极范式,该范式考虑所有的依赖和约束类型,但是实用价值也是最小的,只存在理论研究中。
Catalog和Schema
是数据库对象命名空间中的层次,主要用来解决命名冲突的问题。从概念上说,一个数据库系统包含多个Catalog,每个Catalog又包含多个Schema,而每个Schema又包含多个数据库对象(表、视图、字段等)。但是Mysql的数据库名就是Schema,不支持Catalog。
Mysql的数据库引擎主要有两种MyISAM和InnoDB,MyISAM支持全文检索,InnoDB支持事务。
SQL中的通配符‘%’代表任意字符出现任意次数。‘_’代表任意字符出现一次。SQL与正则表达式结合查询一般用在WHERE table_name REGEXP '^12.34'。子查询是从里到外执行。
数据库联结(join)涉及到外键,外键是指一个表的列是另一个表的主键,那么它就是外键。笛卡尔积联结(不指定联结条件时)生成的记录条目是单纯的第一个表的行乘以第二个表的列数。用得最多的是等值联结也叫内部联结。
高级联结还有自连接,是指查询中的两张表是同一张表,它通常作为外部语句用来代替从相同表中检索数据时使用的子查询。自然联结使每个列只返回一次。外部联结是指联结包含了那些在相关表中没有关联行的行。例如列出所有产品及其订购数量,包括没有人订购的产品。LEFT OUTER JOIN指选择左边表的所有行。
组合查询是指采用UNION等将两个查询结果取并集。
视图是查看存储在别处的数据的一种工具,它本身并不包含数据,因此表的数据修改了,视图返回的数据也将随之修改,因此如果使用了复杂或嵌套视图会对性能有较大的影响。视图的作用之一是隐藏复杂的SQL通常会涉及到联结查询。
存储过程类似于批处理,包含了一条或多条SQL语句。语法:
CREATE PROCEDURE name()
BEGIN
SQL
END
-------------------------
CALL name()//来调用存储过程
游标有DECLARE定义,游标与存储过程是绑定的,存储过程处理完成,游标就会消失。游标被打开后可以使用FETCH语句访问每一行。
触发器是在某个时间发生时自动执行某条SQL语句。语法:
CREATE TRIGGER name AFTER INSERT ON talbe_name FOR EACH ROW
事务处理可以维护数据库的完整性,保证批量的操作要么完全执行,要么完全不执行。包括事务、回退、提交、保留点几个关键术语。ROLLBACK只能在一个事务处理内使用。他不能回退CREATE和DROP操作。使用COMMIT保证事务提交。复杂的事务处理需要部分提交或回退,因此我们需要使用保留点SAVEPOINT。可以使用ROLLBACK TO savepoint_name。保留点越多越好。保留点在事务执行完成后自动释放。
⑶ 空间数据库引擎ArcSDE
空间数据库引擎:ArcSDE9.0(arc spatial database engine);此软件被用作系统后台(Server),其优势在于能按照用户需求合理地管理大规模甚至超大规模的空间数据库,为系统前端提供高效的空间数据和复杂的空间分析服务。
选择空间数据库引擎SDE作为空间数据库管理系统,是一套管理空间数据并提供访问这些数据接口的软件,通过ArcSDE可以把地理空间数据应用到商用的关系型数据库中,SDE融入DBMS后,提供了对空间数据进行高效率操作的接口,大量用户可以同时针对同一数据进行操作,更重要的是ArcSDE客户和服务器之间的通讯建立在TCP/IP协议上,这使得ArcSDE不但能满足局域网的应用,而且能满足远程网的应用。
通过ArcSDE,能够管理具有数百万空间要素的大型空间数据集。ArcSDE对各级企业均能适用,这归功于其在客户与服务器间协同处理。ArcSDE通过TCP/IP协议,提供网络上的开放数据访问;同时,ArcSDE可运行在不同的操作系统环境中,如UNIX,Microsoft Windows的客户端与服务器端。
为了实现以关系数据库管理系统(Oracle)为基础的空间数据管理,需要使用空间数据库引擎。良好的空间数据库引擎能够为数据库的应用系统开发提供高性能的支持。ESRI公司的ArcSDE for Or-acle 是一个基于Oracle的空间数据库引擎,它的空间数据管理高效而稳定,将作为本项目综合数据库的必须软件产品之一。其特点:
(1)对地理数据的开放式系统访问
ArcSDE利用开放系统结构,使得地理数据易于获得,可以把地理数据的管理与使用同其他传统的多媒体数据库合并到一个平滑的计算机环境中。利用ArcSDE的开放性,用户可以进行从简单到复杂的空间数据分析,从几个到许多地理特征的提取,访问超大规模的数据库,高效完成各种复杂任务。
(2)进行高效查询分析
ArcSDE提供一组可靠的几何处理与空间分析功能,通过此功能确定各地理实体间的相互关系,如相交于一点、共一条边界、共一个区域或一个实体包含另一个实体。而且还可以把空间分析嵌入到一个非GIS的应用程序中去。
(3)理想的空间对象模型
ArcSDE把线特征表示成一条不能自相交的线,或只能在终点相交的线;面特征表示成一个简单的多边形或多边形组合。空间对象类型有点、点集、串、线串、环、多边形、环纹多边形(donut polygon)以及网络数据,一个组合数据集称为一个层。层是具有相同形式对象类型的一组地理特征,地理特征通过图层这种空间连续策略进行索引,提高数据管理效率。
(4)快速实现过程
ArcSDE对于复杂空间查询的处理的效率体现在对次要特征(Subsecond Feature)的检索上,快速访问与检索是在C/S模式上实现的,客户端主要是响应空间分析操作,服务器则进行数据搜索和检索。这种互操作处理方法使得动态空间叠加成为可能,当大量增加客户端的时候,利用这种处理可以把客户机带来的性能下降降到最小。
(5)其他
客户端可以通过TCP/IP协议访问Arc/Info数据,不用通过传统的直接挂到数据库所在的磁盘上进行访问,这样系统就可以建立在广域网上,数据分布将不受地域限制。同时允许将一部分数据放在RDBMS中,另一部分数据以传统Arc/Info数据格式保存。而客户端的应用将以同一种方式进行访问,即数据源的不同对客户而言是完全透明的。
ArcSDE本身并没有专用数据库,而是通过与其他通用的DBMS的集成来管理空间数据。根据DBMS的类型,ArcSDE与DBMS的集成可分为两种:①与传统的关系型数据库管理系统(RDBMS)的集成,由于传统的RDBMS不支持数据类型的扩展,无法管理空间数据,只能通过ArcSDE对空间数据和空间操作进行解释和管理。②与面向对象关系数据库(OORDMS)的集成。由于面向对象的关系支持新的数据类型和函数的扩展,ArcSDE可以直接在数据库中定义空间数据类型和空间函数。于是可以通过基于SQL的函数对空间数据进行操作,并在数据库层次建立空间索引。
⑷ SQL 的数据库引擎,Analysis Services ,Reporting Services ,Integration Service 有什么区别
Analysis Services:
Analysis Services 提供了一组丰富的数据挖掘算法,业务用户可使用这组算法挖掘其数据以查找特定的模式和走向。这些数据挖掘算法可用于通过 UDM 或直接基于物理数据存储区对数据进行分析。
Microsoft SQL Server 2005 Analysis Services (SSAS) 为商业智能解决方案提供联机分析处理 (OLAP) 和数据挖掘功能。在使用 Analysis Services 设计商业智能解决方案之前,您应当熟悉成功的解决方案所必需的 OLAP 和数据挖掘概念。Analysis Services 通过允许开发人员在一个或多个物理数据源中定义一个称为统一维度模型 (UDM) 的数据模型,从而很好的组合了传统的基于 OLAP 分析和基于关系报表的各个最佳方面。基于 OLAP、报表以及自定义 BI 应用程序的所有最终用户查询都将通过 UDM(可提供一个此关系数据的业务视图)访问基础数据源中的数据。
Reporting Services:
Microsoft SQL Server Reporting Services 是一种基于服务器的新型报表平台,可用于创建和管理包含来自关系数据源和多维数据源的数据的表格报表、矩阵报表、图形报表和自由格式报表。可以通过基于 Web 的连接来查看和管理您创建的报表。
Integration Service:
是微软的一个智能解决方案,通俗点和ASP.NET程序差不多,它也设计了很多的类似控件的东西,不过叫任务,这些任务的主要功能是将数据从数据源转到数据目的,中间也会有查询,聚合等等更加具体的任务。
⑸ android开发怎么存储数据
Android平台开发过程中,进行数据存储的方式有五种,一下是这五种数据存储的总结:
第一种:使用SharedPreferences存储数据
适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口 令密码等
核心原理:保存基于XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息。通过DDMS的File Explorer面板,展开文件浏览树,很明显SharedPreferences数据总是存储在/data/data/<package name>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferences.edit()获取的内部接口Editor对象实现。SharedPreferences本身是一 个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences实例,该方法中name表示要操作的xml文件名,第二个参数具体如下:
Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本应用程序读、写。
Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他应用程序读,但不能写。
Context.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读,写
Editor有如下主要重要方法:
SharedPreferences.Editor clear():清空SharedPreferences里所有数据
SharedPreferences.Editor putXxx(String key , xxx value):向SharedPreferences存入指定key对应的数据,其中xxx 可以是boolean,float,int等各种基本类型据
SharedPreferences.Editor remove():删除SharedPreferences中指定key对应的数据项
boolean commit():当Editor编辑完成后,使用该方法提交修改
实际案例:运行界面如下
Android sqlite3数据库管理工具
Android SDK的tools目录下提供了一个sqlite3.exe工具,这是一个简单的sqlite数据库管理工具。开发者可以方便的使用其对sqlite数据库进行命令行的操作。
程序运行生成的*.db文件一般位于"/data/data/项目名(包括所处包名)/databases/*.db",因此要对数据库文件进行操作需要先找到数据库文件:
1、进入shell 命令
adb shell
2、找到数据库文件
#cd data/data
#ls --列出所有项目
#cd project_name --进入所需项目名
#cd databases
#ls --列出现寸的数据库文件
3、进入数据库
#sqlite3 test_db --进入所需数据库
会出现类似如下字样:
SQLite version 3.6.22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
至此,可对数据库进行sql操作。
4、sqlite常用命令
>.databases --产看当前数据库
>.tables --查看当前数据库中的表
>.help --sqlite3帮助
>.schema --各个表的生成语句
以上便是android开发存储数据的五种方法!
⑹ 数据库引擎 什么是数据库引擎。谁能详细介绍一下
每种数据库的数据格式,内部实现机制都是不同的,
要利用一种开发工具访问一种数据库,就必须通过一种中介程序,
这种开发工具与数据库之间的中介程序就叫数据库引擎。
⑺ 利用Delphi开发网络数据库应用
Delphi 是具可视化界面的面向对象编程语言 它以其功能强大 简便易用等诸多特性 深受编程人员的欢迎 Delphi 中提供了数据库引擎 BDE(Borland Database Engine) 并内含众多的数据库调用构件 为编程人员开发客户/服务器应用程序提供了方便 通常情况下 利用 Delphi 开发数据库应用程序 可以使用TTable TDataSource TDBEdit TDBNavigator等构件 只要正确设置了构件的某些属性 再编写必要的程序代码对一些特定事件进行处理 就能够完成对多种数据库进行的数据处理 例如 记录的输入 修改 删除和查询等 这样做虽然只需要编写极少量的程序代码就能达到很好的效果 但如果在程序设计过程中 某些数据表的结构发生了改变 则必须修改与此数据表有关的所有构件的属性 这将使程序员陷入繁琐的重复劳动中
为避免上述的麻烦 我们可以在编写网络数据库应用程序时采用结构化查询语言 SQL(Structured Query Language) 这样不仅可以更方便地与诸如 SQL Server Oracle 等各种后台数据库进行动态的数据交换 而且可以使程序的修改和移植更加灵活 我们以数据输入模块为例 说明开发客户/服务器应用程序时如何采用 SQL 语句实现数据处理功能 首先 判断是否已经有事务处理程序在运行 如果有 将其回卷(rollback) 如果没有 则启动一个新的事务 为数据的最终处理做准备 其次 是设置 SQL 语句 并将其写入 TQuery 构件中 最后 将事务提交或回卷 至此完成一条记录的数据输入
下面是以页面中的 TEdit 类型编辑框内容作为数据源 向数据库输入记录的过程代码
procere DataInsert(const qName:TQuery; szDBName:string;iNum:Integer; iMark:array of Integer;eName:array of TEdit); var i : Integer; szSQL : string; begin if DataMole DataBase InTransaction=true then DataMole DataBase RollBack; DataMole DataBase StartTransaction; szSQL := INSERT INTO +szDBName+ VALUES( for i:= to iNum do begin if iMark[i]= then szSQL := szSQL+eName[i] Text {非字符方式} else szSQL := szSQL+ +eName[i] Text+ ; {字符方式} if i=iNum then szSQL := szSQL+ ) else szSQL := szSQL+ ; end; qName Close; {关闭查询} qName SQL Clear; {清SQL特性内容} qName SQL ADD(szSQL); {添加SQL内容} szSQL := SELECT * FROM +szDBName; qName SQL ADD(szSQL); qName Open; {返回结果集} DataMole DataBase Commit; end; 以上过程包含五个参数 实现从页面中的一系列编辑框中读取数据 并向指定数据表输入的功能 其中 参数 qName 为页面中所使用的 TQuery 类构件的名称 参数 szDBName 是数据表的名称 参数eName 是 TEdit 类型的数组 列出了页面中包含数据的各编辑框名称 参数 iNum 是数据表中的字段个数 也即编辑框的个数 参数 iMark 是一个整数类型的数组 该参数表明相应字段是以何种方式输入的 如果是字符方式 需要在数据前后两端加上引号 需要注意的是 在调用本过程之前 应将数据库连接打开
DataMole DataBase Connected := true;
过程调用完成后 将数据库连接断开 DataMole DataBase Connected := false; 另外 开发网络数据库应用程序时 还可以使用存储过程 即 将预先编译过的 SQL 语句存储在服务器上 存储过程提前运行 且不与程序代码一同存储和编译 因此其对应主程序中的代码相对简洁 运行速度也较快 SQL 语句的集中存放 使其修改更容易
要创建向数据表中输入数据的存储过程 代码编写举例如下
CREATE PROC ProcTest @inttest *** allint @strtest char( ) output AS INSERT INTO TEST_User TRANS_TEST VALUES(@inttest @strtest) SELECT @strtest * FROM TEST_User TRANS_TEST 以上代码向数据表 TEST_User TRANS_TEST 添加数据 该数据表包括两个字段 第一个字段为 *** allint 类型的数据 参数类型定为 Input(在存储过程中可缺省) 第二个字段数据为长度为 的字符类型 参数类型为 Output
其模块程序的编写与 DataInsert 过程相似 区别主要在于模块的中间部分 对应的主要代码如下
StoredProc Close; {关闭存储过程} StoredProc Params[ ] ParamType := ptInput; {设置存储过程的参数类型} StoredProc Params[ ] AsInteger := ; {设置存储过程中参数的数据} StoredProc Params[ ] ParamType := ptOutput; StoredProc Params[ ] AsString := abcd ; StoredProc Open; {打开存储过程} 其中 StoredProc 是 TStoredProc 类型的构件名称 Params[ ] 是存储过程中的第一个参数 对应存储过程 ProcTest 可以用ParamByName( @inttest )代替 存储过程的第二个参数与其类似
lishixin/Article/program/Delphi/201311/25067