java数据库编程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Java数据库编程LinboHe数据库技术•数据库是一门研究数据管理的技术,它开始于本世纪60年代,经过多年的发展,已形成理论体系,成为计算机软件的一个重要分支。•数据库是信息管理的基础,任何计算机应用都需要处理大量数据,几乎都少不了的数据库的需求。•随着网络的应用,远程异地的网络数据库使用也变得越来越重要。为什么要使用数据库?•尽管文件系统可以解决不少问题,有些问题是文件系统所无法解决的,如果给文件系统加上这些特性,那么文件系统也就成为了一个数据库。–数据的冗余与数据不一致:重复数据多,而且对于分布式,有可能出现数据无法同步的问题。–数据访问困难,数据孤立:因为数据存储没有采取同样的格式,使得使用统一的接口访问数据变得不可能。–完整性问题:数据的正确性和相容性。–原子性问题:就是事务处理,如何保证一个操作的完整性。–并发访问:这也是事务处理的一部分,数据库需要应对同时异地对同一个数据操作的可能。–安全性问题:主要是数据库访问权限问题。关系型数据库的基本概念•数据库(datebase):按特定方式存储在存储媒体中可共享的相关数据的集合。可以理解为数据的仓库。其组织方式可支持对数据的有效存取。现在的数据库往往由多个表(table)和表之间的关联关系组成的数据的集合,表是一个由若干行、若干列组成的二维的关系结构。•其存在形式是一个计算机文件:如:ABC.DBF,客户.MDB,Total.DBC,我们称之为数据库文件或库文件。•实体用表来表示,实体之间的关系也用表来表示。•表的列称为字段。数据库的概念分层•物理层:定义数据的存储格式。能够涉及者一层的人是数据库软件开发者。•逻辑层:定义数据以及数据之间的关系。能够涉及这一层的人是数据库的设计者。•视图层:定义最终展现在客户面前的数据的格式。涉及这一层的是数据库客户端的开发者,以及最终的用户。•这三层从上到下层层透明。用户不关心数据库结构,数据库设计开发者不关心存储结构。数据模型•什么是数据模型?–数据模型是客观事物及其联系的数据描述,数据模型应具有数据的描述和数据联系两方面功能。•数据的描述就是指出:–模型中包含那些记录类型,并对记录类型进行命名;指明各个记录类型由那些数据构成,并对数据项进行命名,每个数据项均需指明其数据类型和取值范围。•数据间联系的描述就是指明:–各个不同记录间所存在的联系和联系方式。实体模型•什么是实体模型呢?–实体联系模型又称信息模型,是客观事物及其自然联系在人脑中所形成的概念。•实体模型和数据模型的关系是什么?–数据模型本质上是“信息模型”的数据化表示。从实体模型到数据模型要经历三个领域的演变过程:–现实世界→信息世界→数据世界实体与属性这是信息世界中广泛使用的两个术语•实体:现实世界任何可相互区别的事物,不论是实际存在的东西,还是概念性的东西,或是事物与事物之间的联系,一律统称为实体。•属性:实体所具有的性质,统称为属性。实体是靠属性来描述的。•实体集同一类型的实体集合称为实体集。•域实体中的每个属性,都有一个取值范围,这叫作属性的“域”。域可以是整数、实数、字符串等•键(key)又称为关键字,它是指在实体属性中,可用于区别实体集中不同个体的那个属性或几个属性的组合。实体间的联系方式实体之间的联系实际上反映了实体之间的语义关系。联系也是实体,因此它也可以有属性。实体间联系情况比较复杂,就其联系方式来说,我们可把它分为以下三种:1):一对一联系(简记为1:1)2):一对多联系(简记为1:n)3):多对多联系(简记为m:n)一对一联系•若两个同型实体集中,一方的一个实体唯一与另一方的一个实体相对应,则称为1:1联系。如下图所示的婚姻关系一对多联系若两个不同型的实体集中,一方一个实体对应另一方多个实体;反之另一方一个实体最多只与本方一个实体相对应,称1:n联系。如下图所示:多对多关系•若两不同型实体集中,任何方一个实体都与对方一个或多个实体相对应,称m:n联系,如下图学生与课程的关系•“多对多模式”需要在A表和B表之间有一个关联表,这个关联表也是“多对多模式”的核心所在。根据关联表是否有独立的业务处理需求,可将其划分为两种细分情况。–具备独立的业务处理需求,是一个业务实体对象,因此它具备一些特有的属性。–本身不具备独立的业务处理需求,所以也就没有什么特殊的属性。E--R图的画法•E--R图中包括:实体、属性和联系三种基本图素。•习惯上实体用方框表示,实体的属性用椭圆框表示,联系用菱形框表示。E--R的设计原则•针对每一用户作出该用户信息的局部E--R图,确定该用户视图的实体、属性和联系。–能作为属性的就不要作为实体,这样有利于简化E--R图。•综合局部E--R图,产生出总体E--R图。–在综合的过程中,同名实体只能出现一次,还要去掉不必要的联系,以便消除冗余。•最后说明一点:一个系统的E--R图不是唯一的,强调不同的侧面作出的E--R图可能有很大的不同。例•设某企业信息系统有下列用户:人事科处理职工档案;供应科处理采购业务;总务科处理仓库业务;生产科处理产品业务。试根据上述要求设计出能反映所有用户信息视图的总体E--R图。人事科视图供应科视图生产科视图总务科视图总体E--R图综合后的E--R图中去掉了一些联系,又增添了一些新联系,这是允许的导出关系模型•E--R图仅是现实世界的纯粹反映,与数据库具体实现毫无关系,但它是构造数据模型的依据。下面给出从E--R图出发导出关系模型的原则。•原则一:对于E--R图中每个实体,都应转换为一个关系,该关系应包括对应实体的全部属性,并应根据关系所表达的语义确定哪个属性作为“主键”。键在关系模型中是实现联系的主要手段•原则二:对于E--R图中的联系,情况比较复杂,要根据实体联系方式的不同,采取不同的手段加以实现。数据库语言•数据库语言通常由两个部分组成:•(1)DDL——数据定义语言。(2)DML——数据操纵语言。最常用的数据库语言就是SQL。数据库设计要点•主键与外键•一般而言,一个实体不能既无主键又无外键。主键与外键的设计,在全局数据库的设计中,占有重要地位。主键是实体的高度抽象,主键与外键的配对,表示实体之间的连接。•键可以是一无物理意义的数字串,由程序自动加1来实现。也可以是有物理意义的字段名或字段名的组合。不过前者比后者好。当PK是字段名的组合时,建议字段的个数不要太多,多了不但索引占用空间大,而且速度也慢。•通俗地理解三个范式–第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;–第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;–第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余;•没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。•三少原则–一个数据库中表的个数越少越好。只有表的个数少,才能说明系统的E--R图少而精,去掉了重复的多余的实体,形成了对客观世界的高度抽象。–一个表中组合主键的字段个数越少越好。因为主键的作用,一是建主键索引,二是做为子表的外键,所以组合主键的字段个数少了,不仅节省了运行时间,而且节省了索引存储空间;–一个表中的字段个数越少越好。只有字段的个数少了,才能说明在系统中不存在数据重复,且很少有数据冗余JavaJDBC•JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。•JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。ThetypeofJDBC•Type1:JDBC-ODBCbridge–要求客户端必须安装ODBC驱动–执行效率比较低,对于那些大数据量存取的应用是不适合的–适用于快速的原型系统,没有提供JDBC驱动的数据库如Access(DesktopDatabase)•Type2:JavatonativeAPI这种驱动比起JDBC-ODBC桥执行效率略有提高。但是,它仍然需要在客户端加载数据库厂商提供的代码库.这样就不适合基于internet的应用•Type3:JavatoNet适合那种需要同时连接多个不同种类的数据库并且对并发连接要求高的应用•Type4:JavatoNativeDatabase最高的性能,通过自己的本地协议直接与数据库引擎通信JDBC与数据库驱动程序•JDBC为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。真正的数据库访问操作实现是由各自数据库厂商提供的。通常把厂商提供的特定于数据库的访问API称为数据库JDBC驱动程序。•JDBC通过提供一个抽象的数据库接口,使得程序开发人员在编程时可以不用绑定在特定数据库厂商的API上,大大增加了应用程序的可移植性。在实际运行过程中程序代码通过JDBC访问数据库时,仍旧需要调用特定于数据库的访问API。JDBC接口层JDBC驱动层J2EE应用JDBCAPI数据库JDBC驱动程序数据库程序员开发Sun数据库厂商应用层JDBC访问数据库层次结构•为了让JDBC与平台无关,JDBC提供所谓的“驱动程序管理器(drivermanager)”,它会动态维护所有“数据库查询”所需要的驱动程序对象•使用Class.forName()进行装载,向驱动管理器注册。创建数据库连接,分为以下几步:•首先注册数据库驱动程序•然后根据具体的JDBCURL地址,调用DriverManager对象的getConnection()来获取一个代表数据库连接的java.sql.connectuion对象。•JDBCURL的格式如下:•jdbc:子协议:数据库定位器•MySQL数据库:jdbc:mysql://机器名/数据库名•Oracle数据库:jdbc:oracle:thin@机器名:端口名:数据库名•jdbc:sqlserver://localhost:1433;databaseName=Graduate•给定具体的JDBCURL,获取数据库连接的方法是在DriverManager对象上调用getConnection()。这种方法有两种形式:•DriverManager.getConnection(url)•DriverManager.getConnection(url,user,password)•其中第二种方式需要输入用户名和密码信息进行身份认证。连接数据库示例JDBC对数据库执行SQL•java.sql.Statement对象代表一条发送到数据库执行的SQL语句。•有三种Statement对象:–Statement对象用于执行不带参数的简单SQL语句;–PreparedStatement对象用于执行带或不带参数的预编译SQL语句–CallableStatement对象用于执行对数据库存储过程的调用。StatementStatement对象提供了三种执行SQL语句的方法:•executeQuery():(用于产生单个结果集的sql,如select语句)•executeUpdate:(用于执行insert、delete、update、createtable、droptable等)•execute():用于执行返回多个结果集、多个更新计数或二者组合的语句,多数程序员不会需要该高级功能。PreparedStatement•PreparedStatement实例包含已编译的SQL语句,这也是将其命名冠以“Prepared”的原因。包含于PreparedStatement对象中的SQL语句可具有一个或多个IN参数。IN参数的值在SQL语句创建时未被指定。相反的,该语句为每个IN参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前通过适当的setXXX()方法来提供。•由于PreparedStat

1 / 61
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功