JDBC.docx

上传人:b****9 文档编号:25964466 上传时间:2023-06-16 格式:DOCX 页数:20 大小:201.13KB
下载 相关 举报
JDBC.docx_第1页
第1页 / 共20页
JDBC.docx_第2页
第2页 / 共20页
JDBC.docx_第3页
第3页 / 共20页
JDBC.docx_第4页
第4页 / 共20页
JDBC.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

JDBC.docx

《JDBC.docx》由会员分享,可在线阅读,更多相关《JDBC.docx(20页珍藏版)》请在冰豆网上搜索。

JDBC.docx

JDBC

JDBC

JDBC的定位

java程序中JDBC的定位

EJB:

用于企业计算,数据持久化。

开发中,JDBC的定位

Introduction

1WhatIstheJDBCAPI?

ThevalueoftheJDBCAPIisthatanapplicationcanaccessvirtuallyanydatasourceandrunonanyplatformwithaJavaVirtualMachine.

跨平台,跨数据库

WhatDoestheJDBCAPIDo?

1-Establishaconnectionwithadatasource

2-Sendqueriesandupdatestatementstothedatasource

3-Processtheresults

实例程序:

Connectioncon=DriverManager.getConnection("jdbc:

myDriver:

wombat",

"myLogin","myPassword");

Statementstmt=con.createStatement();

ResultSetrs=stmt.executeQuery("SELECTa,b,cFROMTable1");

while(rs.next()){

intx=rs.getInt("a");

Strings=rs.getString("b");

floatf=rs.getFloat("c");

}

DriverManager

加载驱动程序

Class.forName(驱动程序);

Connection

创建连接

Connectioncon=DriverManager.getConnection("jdbc:

myDriver:

wombat",

"myLogin","myPassword");

4类JDBC驱动程序

(1)JDBC-ODBCbridge

Java提供的技术示范,性能差、安全差,实际项目中不使用

(2)Native-APIpartlyJavadriver

部分本地代码APIdriver:

本地代码+Java代码

安全差

(3)JDBC-netpureJavadriver

性能差

(4)NativeprotocolpureJavadriver

数据库也提供VM,来实现Java程序

JDBC的驱动程序,是一个逐步完善的过程。

数据库在程序设计中的定位

面向对象程序设计

面向过程程序设计

JDBC访问数据库

(1)要有Driver

oracle的driver

oracle.jdbc.driver.OracleDriver

MySQL的driver

com.mysql.jdbc.Driver

(2)使用JDBC接口访问数据库

java.sql包:

主要的、基本的JDBC包

Driver

DriverManager

Connection

Statement

PreparedStatement

CallableStatement

ResultSet

DatabaseMetadata

ResultSetMetadata

javax.sql包:

扩展的JDBC包

(3)要符合JDBC协议

oracle的JDBC协议

jdbc:

oracle:

thin:

@IP地址+端口号:

数据库名[username][password]

MySQL的JDBC协议

jdbc:

mysql:

//主机地址+端口号/数据库名[username][password]

JDBC访问数据库的6个步骤

(1)注册驱动程序

(2)建立数据库连接

(3)创建Statement

(4)执行SQL语句

(5)处理结果集

(6)关闭JDBC对象

注册驱动程序

常用方法:

Class.forName(驱动程序名);

Class.forName的作用:

1-加载驱动程序

2-隐含的向DriverManager注册driver

提示:

驱动程序,可注册多个。

建立数据库连接

Connectionconn=DriverManager.getConnection(URL);

Connectionconn=DriverManager.getConnection(URL,username,password);

提示:

数据库已在特定端口进行监听,因此建立数据库连接时,不需要提供登录远端主机的信息,只需提供登录数据库的username和password.

创建Statement

Statementstmt=conn.createStatement();

Statement是操纵数据库的工具。

Statement还有两种:

PreparedStatement:

Statement的子类

CallableStatement:

PreparedStatement的子类

PreparedStatement:

用来处理“同构SQL”

同构SQL:

SQL结构、关键部分相同的SQL语句。

Java程序中的SQL语句,传到DB后,DB分两步执行SQL:

1-编译SQL

2-执行编译后的可执行程序

使用PreparedStatement,可大大减少SQL语句的编译次数,节省时间。

PreparedStatement适合于对数据库的更新。

CallableStatement

调用“存储过程”

执行SQL语句

SQL语句是作为参数,传给DB,交由它编译、执行。

提示:

java中的SQL,不能带分号“;”结束。

Java无法识别“;”的作用。

处理结果集

元数据Metadata:

保存用户数据的数据结构的信息。

DatabaseMetadata

ResultSetMetadata

类比:

去吃牛肉粉,用户关心的是牛肉粉,但是牛肉粉要用碗来装。

牛肉粉是用户数据;

碗:

是元数据。

元数据有一定的作用,有助于表达数据信息。

常用的元数据信息

1-结果集字段个数

2-字段名

3-字段类型

提示:

结果集中,字段的下标是从1开始的。

关闭JDBC对象

原因:

数据库的连接个数是有限制的。

提示:

关闭JDBC对象,也是有顺序的。

若直接关闭Connection对象,则同时关闭Connection对象创建的Statement对象,以及Statement对象创建的ResultSet对象。

事务

原子操作

每一条SQL语句,都是一个原子操作。

原子操作要么成功,要么失败。

事务

对于若干个原子操作来说,它们的状态可有三种:

1-全部成功

2-全部失败

3-有的成功,有的失败

为了避免出现第3种情况。

将若干个原子操作,封装(捆绑)成一个事务,这个事务被看成是一个原子操作。

因此,事务要么成功执行,要么失败。

将若干个原子操作,封装成一个事务,是由数据库来完成的。

程序的工作就是通知数据库,要将那些原子操作封装成一个事务。

步骤:

(事务的开始)1-通知数据库,将以下的若干个原子操作,封装成一个事务:

关闭自动提交:

conn.setAutoCommit(false);

2-执行一系列原子操作(SQL语句)

事务开始后,原子操作的结果,以及原始数据都被保存起来,知道事务的提交。

3-rollback或commit

(事务的结束)4-恢复自动提交

conn.setAutoCommit(true);

一个Connection对象,可有多个Statement。

因此,事务是设置在Connection对象上的。

事务的并发控制

事务并发的负面后果

1-DirtyRead

2-Non-repeatedRead

3-PhantomRead

DirtyRead(脏读)

一个事务读到另一个事务还没提交的数据。

产生不正确的数据。

不可重复读(Non-repeatedRead)

读两次数据:

第1次读原始数据;

第2次读数据时,数据可能被另一个事务修改了。

幻读(PhantomRead)

读两次数据:

第1次读原始数据;

第2次读数据时,数据可能被另一个事务删除了或进行插入操作后,读取的是另一条记录的数据。

DataSource和ConnectionPool

DataSource

用来屏蔽特定的数据库。

把数据库的连接信息放入一个DataSource对象中,连接数据库时,通过该DataSource对象来连接。

优点:

增强程序的可移植性;

DataSource是一种方便的手段。

ConnectionPool

1-存放Connection对象的容器;

2-减少连接数据库的开销;

3-程序请求连接时,在ConnectionPool中取连接;

4-连接使用完后,放回ConnectionPool,不释放;

5-ConnectionPool对连接进行管理:

计数、监控连接状态;

提示:

DataSource,使用的是ConnectionPool中的连接。

JNDI、DataSource、ConnectionPool的关系

DataSource是为了给使用者共享的,而JNDI是用来存放共享资源的。

因此,DataSource被放到JNDI服务器上。

JDBC和JNDI的比较

JDBC

JNDI

加载

驱动程序

服务提供者

物理存储

数据库

IDAP,文件,注册表…各种设备

API

JDBCAPI

JNDIAPI

存储内容

二维表

对象

密度

集中

零散,杂乱

访问方式

SQL

bind,lookup

提示:

文件系统filesystem也是一种服务器,它自带在操作系统中。

创建一个数据源

1-创建一个DataSource对象;

2-将DataSource对象放入JNDI中,并指定数据源名:

Context对象.bind(数据源名,DataSource对象)

访问一个数据源

1-数据源名;

2-JNDI的位置;

3-访问一个数据源:

Context对象.lookup(数据源名)

应用程序访问数据库的过程:

1-连接JNDI服务器;

2-从JNDI中取数据源;

3-使用ConnectionPool的连接;

4-连接数据库;

5-操作数据库;

6-关闭连接。

3层架构(Three-TierArchitecture)

RowSet(行集)

RowSet的特点:

1-RowSet,能将记录缓存在本地机的内存中;

2-适应分布式计算;

3-可在网络中传递;

4-RowSet可是无连接的、也可是有连接的;

5-默认是可更新、可滚动的结果集。

RowSet的实现

1-安装开发包;

2-开发RowSet应用程序。

RowSet的类型

CachedRowSet

WebRowSet

注意:

有些数据库还没有提供RowSet,现在用的是sun公司的RowSet开发包。

Rowset填补了MySQL不支持可更新结果集的限制。

Oracle不支持RowSet的可更新功能。

RowSet对象.acceptChanges();

OOADandDatabaseDesign

DatabaseDesign:

数据库设计模式

E-R图模式

OOAD:

面向对象的分析与设计

E-O

entityobject

实体的关系对象的关系

ObjectID对象标识

在数据库中,用OID来标识一个对象。

一个对象,是class表的一条记录。

ObjectID的限制条件:

1-新建一个字段来作为OID;

2-不能使用有业务含义的字段来做OID;

3-OID有“有效范围”;

4-OID的唯一性比primarykey更严格;

5-计算OID的算法:

single-rowtable,hign/low。

OID算法

single-rowtable:

一行一列表

在single-rowtable中,每个字段存放的是一个sequence,这样就保证OID的唯一性。

high/low算法

high/low算法是对single-rowtable算法的改进。

high/low的思想:

批发零售

high/low的高级用法

(1)设一个最高级的OID分配服务器;

(2)所有的下级OID分配服务器都到它那获取OID的高位部分;

(3)再自己造底位部分

(4)高位部分、底位部分还可细分。

例如:

IP地址的分配,全世界都从美国获取IP地址的高位部分,

再自己造地位部分,

这就保证了IP地址在全世界的唯一性。

Mappingclassestotables

onetableforeachclass:

为每个类建一个表

onetableforeachconcrete(实体)class:

为每个实体类建一个表

onetableforanentireclasshierarchy:

为类的继承关系建一个表

前提:

必须先有类的继承关系,才能建表

为每个类建一个表

优点:

(1)更接近OO的概念

(2)支持多态

(3)易维护、无冗余

缺点:

(1)表的数量多;

(2)读写表花费的时间长;

(3)生成报表比较困难。

为每个实体类建一个表

优点:

(1)更接近OO的概念

(2)支持多态

(3)易维护、无冗余

(4)生成报表较容易

缺点:

(1)修改抽象类,会影响实现该抽象类的所有实体类的表;

(2)数据定义有冗余。

为类的继承关系建一个表

优点:

(1)设计模式易理解

(2)支持多态

(3)容易生成报表

缺点:

(1)任何一个类的修改,都会影响表;

(2)表的结构极大;

(3)很难应用数据库的规则,来提高表的读写性能;

(4)维护困难

end

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1