java数据库编程_第1页
java数据库编程_第2页
java数据库编程_第3页
java数据库编程_第4页
java数据库编程_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java数据库编程,Linbo He,数据库技术,数据库是一门研究数据管理的技术,它开始于本世纪60年代,经过多年的发展,已形成理论体系,成为计算机软件的一个重要分支。 数据库是信息管理的基础,任何计算机应用都需要处理大量数据,几乎都少不了数据库的需求。 随着网络的应用,远程异地的网络数据库使用也变得越来越重要。,为什么要使用数据库?,尽管文件系统可以解决不少问题,有些问题是文件系统所无法解决的,如果给文件系统加上这些特性,那么文件系统也就成为了一个数据库。 数据的冗余与数据不一致:重复数据多,而且对于分布式,有可能出现数据无法同步的问题。 数据访问困难,数据孤立:因为数据存储没有采取同样的格

2、式,使得使用统一的接口访问数据变得不可能。 完整性问题:数据的正确性和相容性。 原子性问题:就是事务处理,如何保证一个操作的完整性。 并发访问:这也是事务处理的一部分,数据库需要应对同时异地对同一个数据操作的可能。 安全性问题:主要是数据库访问权限问题。,关系型数据库的基本概念,数据库(date base):按特定方式存储在存储媒体中可共享的相关数据的集合。可以理解为数据的仓库。其组织方式可支持对数据的有效存取。现在的数据库往往由多个表(table)和表之间的关联关系组成的数据的集合,表是一个由若干行、若干列组成的二维的关系结构。 其存在形式是一个计算机文件: 如:ABC.DBF,客户.MDB

3、, Total.DBC,我们称之为数据库文件或库文件。,实体用表来表示,实体之间的关系也用表来表示。 表的列称为字段。,数据库的概念分层,物理层:定义数据的存储格式。能够涉及这一层的人是数据库软件开发者。 逻辑层:定义数据以及数据之间的关系。能够涉及这一层的人是数据库的设计者。 视图层:定义最终展现在客户面前的数据的格式。涉及这一层的是数据库客户端的开发者,以及最终的用户。 这三层从上到下层层透明。用户不关心数据库结构,数据库设计开发者不关心存储结构。,数据模型,什么是数据模型? 数据模型是客观事物及其联系的数据描述,数据模型应具有数据的描述和数据联系两方面功能。 数据的描述就是指出: 模型中

4、包含那些记录类型,并对记录类型进行命名;指明各个记录类型由那些数据构成,并对数据项进行命名,每个数据项均需指明其数据类型和取值范围。 数据间联系的描述就是指明: 各个不同记录间所存在的联系和联系方式。,实体模型,什么是实体模型呢? 实体联系模型又称信息模型,是客观事物及其自然联系在人脑中所形成的概念。 实体模型和数据模型的关系是什么? 数据模型本质上是“信息模型”的数据化表示。从实体模型到数据模型要经历三个领域的演变过程: 现实世界信息世界数据世界,实体与属性,这是信息世界中广泛使用的两个术语 实体:现实世界任何可相互区别的事物,不论是实际存在的东西,还是概念性的东西,或是事物与事物之间的联系

5、,一律统称为实体。 属性:实体所具有的性质,统称为属性。实体是靠属性来描述的。 实体集 同一类型的实体集合称为实体集。 域 实体中的每个属性,都有一个取值范围,这叫作属性的“域”。域可以是整数、实数、字符串等 键(key) 又称为关键字,它是指在实体属性中,可用于区别实体集中不同个体的那个属性或几个属性的组合。,实体间的联系方式,实体之间的联系实际上反映了实体之间的语义关系。联系也是实体,因此它也可以有属性。实体间联系情况比较复杂,就其联系方式来说,我们可把它分为以下三种: 1):一对一联系(简记为1:1) 2):一对多联系(简记为1:n) 3):多对多联系(简记为m:n),一对一联系,若两个

6、同型实体集中,一方的一个实体唯一与另一方的一个实体相对应,则称为1:1联系。如下图所示的婚姻关系,一对多联系,若两个不同型的实体集中,一方一个实体对应另一方多个实体;反之另一方一个实体最多只与本方一个实体相对应,称1:n联系。如下图所示:,多对多关系,若两不同型实体集中,任何方一个实体都与对方一个或多个实体相对应, 称m :n联系,如下图学生与课程的关系,“多对多模式”需要在A表和B表之间有一个关联表,这个关联表也是“多对多模式”的核心所在。根据关联表是否有独立的业务处理需求,可将其划分为两种细分情况。 具备独立的业务处理需求,是一个业务实体对象,因此它具备一些特有的属性。 本身不具备独立的业

7、务处理需求,所以也就没有什么特殊的属性。,E-R图的画法,E-R图中包括:实体、属性和联系三种基本图素。 习惯上实体用方框表示,实体的属性用椭圆框表示,联系用菱形框表示。,E-R的设计原则,针对每一用户作出该用户信息的局部E-R图,确定该用户视图的实体、属性和联系。 能作为属性的就不要作为实体,这样有利于简化E-R图。 综合局部E-R图,产生出总体E-R图。 在综合的过程中,同名实体只能出现一次,还要去掉不必要的联系,以便消除冗余。 最后说明一点:一个系统的E-R图不是唯一的,强调不同的侧面作出的E-R图可能有很大的不同。,例,设某企业信息系统有下列用户:人事科处理职工档案;供应科处理采购业务

8、;总务科处理仓库业务;生产科处理产品业务。试根据上述要求设计出能反映所有用户信息视图的总体E-R图。,人事科视图,供应科视图,生产科视图,总务科视图,总体E-R图,综合后的E-R图中去掉了一些联系,又增添了一些新联系,这是允许的,导出关系模型,E-R图仅是现实世界的纯粹反映,与数据库具体实现毫无关系,但它是构造数据模型的依据。下面给出从E-R图出发导出关系模型的原则。 原则一:对于E-R图中每个实体,都应转换为一个关系,该关系应包括对应实体的全部属性,并应根据关系所表达的语义确定哪个属性作为“主键”。键在关系模型中是实现联系的主要手段 原则二:对于E-R图中的联系,情况比较复杂,要根据实体联系

9、方式的不同,采取不同的手段加以实现。,数据库语言,数据库语言通常由两个部分组成: (1) DDL数据定义语言。 (2)DML数据操纵语言。最常用的数据库语言就是SQL。,数据库设计要点,主键与外键 一般而言,一个实体不能既无主键又无外键。主键与外键的设计,在全局数据库的设计中,占有重要地位。主键是实体的高度抽象,主键与外键的配对,表示实体之间的连接。 键可以是一无物理意义的数字串, 由程序自动加1来实现。也可以是有物理意义的字段名或字段名的组合。不过前者比后者好。当PK是字段名的组合时,建议字段的个数不要太多,多了不但索引占用空间大,而且速度也慢。,通俗地理解三个范式 第一范式:1NF是对属性

10、的原子性约束,要求属性具有原子性,不可再分解; 第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性; 第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余; 没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。,三少原则 一个数据库中表的个数越少越好。只有表的个数少,才能说明系统的E-R图少而精,去掉了重复的多余的实体,形成了对客观世界的高度抽象。 一个表中组合主键的字段个数越少越好。因为主键的作用,一是建主键索引,二是做为子表的外键,所以组合主键的字段个

11、数少了,不仅节省了运行时间,而且节省了索引存储空间; 一个表中的字段个数越少越好。只有字段的个数少了,才能说明在系统中不存在数据重复,且很少有数据冗余,Java JDBC,JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。 JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。,The type of JDBC,Type1:JDBC-ODBC bridge 要求客户端必须

12、安装ODBC驱动 执行效率比较低,对于那些大数据量存取的应用是不适合的 适用于快速的原型系统,没有提供JDBC驱动的数据库如Access(Desktop Database),Type2:Java to native API 这种驱动比起JDBC-ODBC桥执行效率略有提高。但是,它仍然需要在客户端加载数据库厂商提供的代码库.这样就不适合基于internet的应用,Type3:Java to Net 适合那种需要同时连接多个不同种类的数据库并且对并发连接要求高的应用,Type4:Java to Native Database 最高的性能,通过自己的本地协议直接与数据库引擎通信,JDBC与数据库驱

13、动程序,JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。真正的数据库访问操作实现是由各自数据库厂商提供的。通常把厂商提供的特定于数据库的访问API称为数据库JDBC驱动程序。 JDBC通过提供一个抽象的数据库接口,使得程序开发人员在编程时可以不用绑定在特定数据库厂商的API上,大大增加了应用程序的可移植性。在实际运行过程中程序代码通过JDBC访问数据库时,仍旧需要调用特定于数据库的访问API。,JDBC访问数据库层次结构,为了让JDBC与平台无关,JDBC提供所谓的“驱动程序管理器(driver manager)”,它会动态

14、维护所有“数据库查询”所需要的驱动程序对象 使用Class.forName()进行装载,向驱动管理器注册。,创建数据库连接,分为以下几步: 首先注册数据库驱动程序 然后根据具体的JDBC URL地址,调用DriverManager对象的getConnection()来获取一个代表数据库连接的java.sql.connection对象。 JDBC URL 的格式如下: jdbc:子协议:数据库定位器,MySQL数据库:jdbc:mysql:/机器名/数据库名 Oracle数据库:jdbc:oracle:thin机器名:端口名:数据库名 jdbc:sqlserver:/localhost:1433

15、;databaseName=Graduate,给定具体的JDBC URL,获取数据库连接的方法是在DriverManager对象上调用getConnection()。这种方法有两种形式: DriverManager.getConnection(url) DriverManager.getConnection(url,user,password) 其中第二种方式需要输入用户名和密码信息进行身份认证。,连接数据库示例,JDBC对数据库执行SQL,java.sql.Statement 对象代表一条发送到数据库执行的SQL语句。 有三种 Statement 对象: Statement 对象用于执行不带

16、参数的简单 SQL 语句; PreparedStatement 对象用于执行带或不带参数的预编译 SQL 语句 CallableStatement 对象用于执行对数据库存储过程的调用。,Statement,Statement对象提供了三种执行SQL语句的方法: executeQuery():(用于产生单个结果集的sql,如select语句) executeUpdate:(用于执行insert、delete、update、create table、drop table等) execute():用于执行返回多个结果集、多个更新计数或二者组合的语句,多数程序员不会需要该高级功能。,PreparedS

17、tatement,PreparedStatement 实例包含已编译的 SQL 语句,这也是将其命名冠以“Prepared”的原因。包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN 参数的值在 SQL 语句创建时未被指定。相反的,该语句为每个 IN 参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前通过适当的 setXXX() 方法来提供。 由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象。因此多次执行的 SQL 语句经常创建为 PreparedStatement 对

18、象,以提高效率。,PreparedStatement 接口也有自己的 executeQuery、executeUpdate 和 execute 方法。Statement 对象本身不包含 SQL 语句,因而必须给 Statement.execute 方法提供 SQL 语句作为参数。PreparedStatement 对象并不将 SQL 语句作为参数提供给这些方法,因为它们已经包含预编译 SQL 语句。,CallableStatement,调用存储过程 将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用e

19、xecute,即可自动完成命令。,存储过程的优点,存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。 当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。 存储过程可以重复使用,可减少数据库开发人员的工作量 安全性高,可设定只有本地用户才具有对指定存储过程的使用权,Statement接口的比较,关闭JDBC资源,首先关闭记录集; 其次关闭Statement; 最后关闭连接对象。例: if(r

20、s !=null) tryrs.close();catch(SQLException e) e.printStackTrace(); if(stm!=null)trystm.close(); catch(SQLException e)e.printStackTrace(); if(con!=null)trycon.close(); catch(SQLException e)e.printStackTrace();,元数据与异常,元数据 异常,元数据,元数据:描述数据的数据。开发IDE工具、中间件服务器开发人员需要重点掌握。对于普通的应用系统开发者,只需了解即可。 DatabaseMetaDat

21、a接口,用于提供关于数据库的整体综合信息。 DatabaseMetaData dmd=conn.getMetaData(); DatabaseMetaData:整个数据库的元数据 数据库版本、名称 数据库驱动程序的版本、名称 数据库支持的操作(事务隔离级别、结果集支持的类型等) ResultSetMetaData ,用于描述结果集本身的信息, 表结构(包括有哪些字段,字段的类型等信息).即可用于获取关于 ResultSet对象中列的类型和属性信息的对象。 ResultSetMetaData rsmd=rs.getMetaData();,异常,SQLException:致命性的错误,如,表不存在

22、等,主键重复等。 int getErrorCode() MySQL:1062 DB2:803 Oracle:1 /Vendor specific 依赖于具体的数据库厂商,返回数据库厂商特定的错误代码。 SQLException getNextException() 检索到此 SQLException 对象的异常链。 如果不存在,则返回 null。 String getSQLState() 依赖于规范 ,返回SQL99或者XOPEN中规定的错误代码。,出现SQLException的情况: 网络连接失败 SQL语句存在语法错误 不支持的函数调用 引用不存在的字段 插入主键相同的行 其他 SQLWa

23、rning(非致命性的错误,提供关于数据库访问警告信息的异常,很多时候无需程序员处理,是SQLException类的子类) 抛出SQLWarning之后数据库操作是否成功,与特定的数据库Driver相关,事务处理,What is Transaction JDBC API中使用事务处理步骤 并发控制,What is Transaction,事务处理:一系列的动作作为一个不可分解的操作。 ACID 属性:Atomic Consistent Isolated Durable 1.原子性 ALL-NOTHING 事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执

24、行。 2.一致性 事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。 3.分离性 分离性指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。 4.持久性 持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,耐得住任何系统故障。持久性通过数据库备份和恢复来保证。,JDBC API中使用事务处理步骤,默认是自动提交:每发送一条SQL语句都是自动提交的!

25、1) 用false作为参数调用Connection setAutoCommit方法; 2) 执行一或多个关于数据库的操作; 3) 调用commit方法完成改变; 4) 如果发生错误,恢复上次提交后的改变,调用rollback方法; 5) 用true作为参数调用setAutoCommit方法; 恢复自动提交事务开关。,Connection Pool,存放Connection对象的容器; 减少连接数据库的开销; 程序请求连接时,在Connection Pool中取连接; 连接使用完后,放回Connection Pool,不释放; Connection Pool对连接进行管理:计数、监控连接状态;,JNDI,JNDI(Java Naming and Directory Interface), 能够提供注册和访问远程服务的API. 相应的API在javax.naming包中.JNDI API为应用程序提供了一种统一的访问远程服务的方式. 使用JNDI API , 应用程序能够通过指定一个逻辑的名称来访问一个DataSource(当然可以是其他类型的远程对象)对象。,DataSource,What is DataSource? 二种数据库连接的方式,What is Da

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论