配色: 字号:
第11章 数据库应用
2015-06-30 | 阅:  转:  |  分享 
  
JDBCAPI基本功能包括:(1)指定JDBC驱动程序类型,并建立与指定数据库的连接;(2)执行SQL语句并处理结果。(3)获
得所连接数据库的各种信息,包括驱动程序、数据库、表、列的属性等。DriverManager类用于管理驱动程序和创建数
据库连接,Connection接口用于管理已建立的数据库连接。Statement接口用于管理和执行SQL语句,ResultS
et接口用于存储数据查询返回的结果集。(1)为JDK在环境变量classpath中添加路径publicstaticClas
sforName(StringclassName)throwsClassNotFoundExceptio
npublicclassDriverManager{publicstaticsynchronizedConn
ectiongetConnection(Stringurl,Stringuser,Stringpasswo
rd)throwsSQLExceptionpublicstaticsynchronizedConnectio
ngetConnection(Stringurl)throwsSQLException}publi
cinterfaceConnection{StatementcreateStatement()throws
SQLException; //创建执行SQL的语句对象
StatementcreateStatement(intresultSetType,int
resultSetConcurrency)throwsSQLException;
//参数指定结果集属性voidclose()
throwsSQLException;//关闭数据库连接booleanisClosed()throwsSQLExc
eption;
//判断数据库连接是否已关闭DatabaseMetaDatagetMetaData()throws SQ
LException;//
获取所连接数据库的元数据}DatabaseMetaData接口:管理通过Connection对象连接的数据库的属性信息(称为元
数据),包括基本表描述、所支持的SQL语法、存储过程、基于连接所能进行的操作等。publicinterfaceDatabas
eMetaData{StringgetURL()throwsSQLException;
//返回连接数据库的URL
StringgetUserName()throwsSQLException;
//返回数据库的用户名StringgetDatabase
ProductName()throwsSQLException;
//返回数据库名称StringgetDatabaseProductVersion()throwsSQLException
; //返回数据库版本号String
getDriverName()throwsSQLException;
//返回驱动程序名称StringgetDriverVersion()thr
owsSQLException;
//返回驱动程序版本号}调用executeUpdate(sql)方法可以执行数据定义和数据更新的SQ
L语句。调用executeQuery()方法可以执行数据查询的SELECT语句,返回的结果集由ResultSet接口对象保
存。数据查询的结果集是基本表经过关系运算得到的一个子集,仍然是一个关系,也称为导出表。导出表结构与基本表结构
并不相同,通常导出表的列数、行数均小于等于基本表。ResultSet对象存储一个数据查询结果集,结果集由若干行、若干
列的数据项组成。对结果集的操作由ResultSet接口提供的方法实现,包括确定当前行、移动行、获得或设置列值等。(1)
当前行ResultSetMetaData接口提供从一个结果集中获得元数据的方法,这些数据包括表名、列数、列名、列的数据类型
、列宽度等属性信息。对于通过Select语句获得的一个结果集,如果不能确定其表结构,则可调用ResultSetMe
taData接口中的方法获得各列属性。publicinterfaceResultSetMetaData{
intgetColumnCount()throwsSQLException;
//返回列数StringgetColumnName(intc
olumn)throwsSQLException;//返回列名
StringgetColumnTypeName(intcolumn)throwsSQLExcepti
on;//返回列数据类型名intgetColumnDisplaySize(intcolum
n)throwsSQLException;//返回列所占的最大字符宽度}JDBC应用程序中,采用
JDBCAPI主要方法的流程图——如图11.18
(1)指向当前行的指针(1)指向当前行的指针(1)指向当前行的指针一个ResultSet对象表示的结果集默认是不可滚动
的、只读的,指针初始指向第一行之前。如果需要使结果集可滚动或可更新,则必须在创建Statement对象时指定结果
集的属性。Connection接口中还有一个带参数的createStatement()方法,声明如下:11.3.3
连接数据库【例11.2】连接指定数据库并获得数据库属性信息。——本例设计了两个类:一个是对数据库操作的类DataB
aseOperation,实现建立连接、返回所连接数据库的信息、关闭数据库连接等方法;另一个类是GetDBMe
ssage,它调用DataBaseOperation类的方法,同时与两个不同类型的数据库建立连接,并获得数据库属性信息。
①数据库操作类②GetDBMessage类11.3.4执行SQL语句publicinterfaceStat
ement{intexecuteUpdate(Stringsql)throwsSQLException;
//执行数据定义和数据更新SQL语句Result
SetexecuteQuery(Stringsql)throwsSQLException;
//执行数据查询SQL语句booleanexecute(
Stringsql)throwsSQLException;
//执行SQL语句Statement接口用于管理和执行SQL语句,ResultSet接口用于存储数据查询返回的结果值。
11.3.4执行SQL语句intgetUpdateCount()throwsSQLException;
//获得数据更新所影响的行数
ResultSetgetResultSet()throwsSQLException;
//获得数据查询结果集voidclose()t
hrowsSQLException;//关闭语句}11.3.4执行SQL语句1.执行数据定义和数据更新S
QL语句执行数据定义的SQL语句,用于创建和修改临时表,没有返回值;执行数据更新的SQL语句,包括INSERT、UPDA
TE、DELETE语句,返回执行所影响的行数。11.3.4执行SQL语句例如:下列语句执行Insert语句插
入一行数据Statementstatement=connection.createStatement();

//创建执行SQL语句的Statement对象Stringsql="INSERTINTOstuinfo
(stu#,stu_name)VALUES(''98111041'',''李伟'')"
;intresult=statement.executeUpdate(sql);
//执行成功时返回影响的行数11.执行数据定义和数
据更新SQL语句11.3.4执行SQL语句2.执行数据查询SQL语句例如:下列语句执行SELECT语句。Strin
gsql="SELECTFROMstuinfo";//SELECT语句ResultSetresultset
=statement.executeQuery(sql);
//执行SELECT语句11.3.4执行SQL语句3.执行SQL语
句调用execute()方法执行SQL语句(不确定SQL语句类别时);调用getResultSet()方法获得数据查询结果集
调用getUpdateCount()方法获得数据更新所影响的行数。11.3.5处理数据查询的结果集与数据查询结
果集有关的接口主要有以下两个:ResultSet接口用于存储数据查询返回的结果集;ResultSetMetaData接口从
结果集中获得列的各种属性信息,从而能够获得表结构。11.3.5处理数据查询的结果集1.ResultSet接口存
储结果集11.3.5处理数据查询的结果集publicinterfaceResultSet{//下列方法用于改
变当前行的位置intgetRow()throwsSQLException;//获得当前行位置booleanf
irst()throwsSQLException;//设置第一行为当前行booleanlast()throwsSQL
Exception;//设置最后一行为当前行booleanprevious()throwsSQLException;
//设置当前行的前一行为新的当前行bo
oleannext()throwsSQLException;
//设置当前行的后一行成为新的当前行——表示将要对结果集进行操作的位置11.3.5处理数据查询的
结果集booleanrelative(introws)throwsSQLException;
//设置当前行的前/后rows行为新的当前行booleanabsolut
e(introw)throwsSQLException;
//设置第row行为当前行booleanisFirst()throwsSQLException;
//判断当前行是否是第一行booleanisLast
()throwsSQLException;/
/判断当前行是否是最后一行}11.3.5处理数据查询的结果集(2)获得当前行指定列的数据项值ObjectgetO
bject(intcolumnIndex)throwsSQLException;ObjectgetObject(St
ringcolumnName)throwsSQLException;StringgetString
(intcolumnIndex)throwsSQLException;StringgetString(String
columnName)throwsSQLException;下列一组get()方法用于返回当前行指定列
的数据项值,参数分别是列序号或列名,列序号初始值为1,返回值数据类型各不相同。11.3.5处理数据查询的结果集(2)
获得当前行指定列的数据项值查看一个结果集中的多行数据,使用一个循环语句。例如:下列循环语句获得一个结果集中第1列的全部数据项
值while(resultset.next())System.out.println(resu
ltset.getString(1));
//获得当前行指定列的值注意:getString()方法以字符串方式返回当前行指定列值,无
论真正的数据类型是什么。11.3.5处理数据查询的结果集2.ResultSetMetaData接口从结果集中获得元数据
11.3.5处理数据查询的结果集11.3.5处理数据查询的结果集例如:下列语句从结果集中获得所有列的个数R
esultSetMetaDatarsmd=resultset.getMetaData();
//返回元数据对象intcolumnCount=rsmd.getColumnCount
();//获得列数2.ResultSetMetaData
接口从结果集中获得元数据11.3.5处理数据查询的结果集【例11.3】执行数据操纵的SQL语句。——演示两种SQL语句
数据更新和数据查询的执行方法,调用executeUpdate()方法执行数据更新的INSERT语句,调用execu
teQuery()方法执行数据查询的SELECT语句并查看结果集。①执行数据更新SQL语句的方法②执
行数据查询SELECT语句的方法③调用上述insert()方法和select()方法的应用程序11.3.5处理数据查询的
结果集3.ResultSet接口功能进一步讨论当前行指针cursor——默认指针由Java管理,应用程序不需要直
接使用指针;可调用ResultSet接口中的方法移动或判断指针位置,为以后对当前行进行操作做准备。11.3.
5处理数据查询的结果集voidbeforeFirst()throwsSQLException;
//将指针指向第一行之前voidafter
Last()throwsSQLException;
//将指针指向最后一行之后booleanisBeforeFirst()throwsSQL
Exception;//
判断指针是否指向第一行之前
booleanisAfterLast()throwsSQLException;
//判断指针是否指向最后一行之后 设置、判断指针位置的方法声明如下:例如:下列
循环语句可获得结果集的总行数introwCount=0;while(resultset.next())rowCo
unt++;//获得结果集总行数11.3.5处理数据查询的结果集11.3.5处理数据查询的结果集(2)
结果集属性不可滚动的—指针只有一个移动方向,只能从前向后移动,此时只能调用next()方法使指针向后移动,而不能调用
previous()方法使指针向前移动;当while(resultset.next())循环执行完之后,也不能调用
beforeFirst()方法使指针回到最前。只读—结果集不可更改,不能通过结果集更新数据库中的数据。11.3.
5处理数据查询的结果集StatementcreateStatement(intresultSetType,int
resultSetConcurrency)throwsSQLException;(2)结果集属性参数resultS
etType指定结果集是否可滚动属性,参数resultSetConcurrency指定结果集是否可更新属性。对数据更新是否敏感
指当执行插入、删除、更新等其他SQL语句改变了表中数据时,当前结果集中的数据是否能够随之更新。11.3.5
处理数据查询的结果集(2)结果集属性ResultSet接口中声明了以下3个常量表示结果集是否可滚动属性:intT
YPE_FORWARD_ONLY=1003;
//指针只能从前向后移动,默认值intTYPE_SCROLL_INSENSITIVE=1004;
//结果集可滚动、对数据更新不敏
感intTYPE_SCROLL_SENSITIVE=1005;
//结果集可滚动、对数据更新敏感ResultSet接口中声明了以下2个常量表示结果集是否
可更新属性:intCONCUR_READ_ONLY=1007;//只读,默认值intCONCUR_
UPDATABLE=1008;//可更新
11.3.5处理数据查询的结果集例如:下列语句在创建Statement对象时指定结果集的属性
为可滚动、只读:Statementstatement=connection.createStatement
(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_
READ_ONLY);(2)结果集属性第11章数据库应用数据库技术有效地管理和存取大量的数据资
源。数据库存储的是通用化的相关数据集合,不仅包括数据本身,而且包括数据之间的联系。Java提供JDBCAPI支持数
据库应用,JDBC(Java数据库连接)是基于Java的、用于访问关系数据库的应用程序编程接口。JDBC提供多种数据
库驱动程序类型,提供执行SQL语句来操纵关系数据库的方法,使Java应用程序具有访问不同类型数据库的能力。学习目标:1.了
解数据库系统、关系模型、客户-服务器模式等基本概念;2.掌握SQL语言的数据定义、数据操纵和数据查询等语句语法;3.了解JD
BC各种数据库驱动程序类型;4.熟悉JDBCAPI提供的接口和类;5.掌握连接数据库、执行SQL语句、处理结果集等操作方
法。第11章数据库应用11.1关系数据库系统11.2结构化查询语言SQL11.3JDBC第11章数据库应
用11.1关系数据库系统11.1.1数据库系统11.1.2关系模型11.1.3客户-服务器结构的关系数据库系
统11.1.4使用Access数据库11.1.5使用SQLServer数据库11.2结构化查询语言SQL
11.2.1SQL概述11.2.2数据定义11.2.3数据更新11.2.4数据查询11.3JDBC
11.3.1JDBC的作用和功能11.3.2指定JDBC驱动程序11.3.3连接数据库11.3.4执行SQL语句
11.3.5处理数据查询的结果集11.3.1JDBC的作用和功能1.什么是JDBCJDBC(JavaDa
taBaseConnectivity,Java数据库连接):基于Java的、用于访问关系数据库的应用程序编程接口。
提供在Java应用程序中执行SQL语句以访问和操作关系数据库的方法。JDBC是一种数据库连接和访问标准:一方面:Java
语言增加了JDBCAPI,其中包括多个用于访问数据库的接口;另一方面:目前大多数主流数据库都支持JDBC,推
出了各自的JDBC驱动程序,每个驱动程序都实现了JDBCAPI中声明
的接口。11.3.1JDBC的作用和功能1.什么是JDBCJDBC既实现了应用程序与数据库的连接,
又实现了数据独立性,使应用程序具有很好的可移植性,一份应用程序可应用于不同类型的数据库。11.3.1JDBC的作用和
功能2.JDBC驱动程序类型JDBC数据库应用程序必须使用JDBC驱动程序,JDBC驱动程序与ODBC驱动
程序的区别主要有以下两点:ODBC只适用于Windows平台,而JDBC具有跨平台特性。ODBC数据源需要手工配置,JDBC在
应用程序中是指定数据库,不需要手工配置。11.3.1JDBC的作用和功能(1)JDBC-ODBC桥驱动程序
JDBC-ODBC桥驱动程序:通过把JDBC方法翻译成ODBC函数调用,使Java应用程序可以通过ODBC驱动程序访问数据库。
优点:有大量的ODBC驱动程序可用,但只能用于MicrosoftWindows和SunSola
ris操作系统;缺点:不易于移植,且运行速度较慢。11.3.1JDBC的作用和功能(2)本地库Java实现驱动程
序本地库Java实现驱动程序:建立在已有专用驱动程序的基础上,将JDBC方法翻译成本地已有的专用驱动程序。优点:能够充分利
用已有的专用驱动程序;缺点:不具有跨平台特性。11.3.1JDBC的作用和功能(3)网络协议驱动程序网络协议驱
动程序:一种全新结构的驱动程序,以“中间件”形式出现,由中间件组件把JDBC方法翻译成数据库客户端请求,再向数据库服务器发送请
求,中间件组件和数据库客户端通常位于中间层服务器上。优点:方式很灵活;缺点:涉及网络安全问题。11.3.1JDBC
的作用和功能(4)数据库协议驱动程序数据库协议驱动程序:一种全新结构的驱动程序,特点是应用程序直接与数据库服务器端通信,
需要数据库开发商的强力支持,提供基于特定数据库的网络插件,实现针对特定数据库的通信协议,使JDBC驱动程序通过网络插件直接与数
据库服务器通信。图11.15JDBC驱动程序类型及其工作原理11.3.1JDBC的作用和功能3.JDBC
API的基本功能、组成和工作原理图11.16JDBCAPI的组成和工作原理11.3.1JDBC的作用和功能
3.JDBCAPI的基本功能、组成和工作原理Java的接口机制是分隔方法声明与方法实现细节的最好机制,接口
机制的优点在JDBCAPI中得到充分体现。JDBCAPI声明了多个接口提供给应用程序使用,但是这些接口的实现却不是应用程序
所能完成的,必须由JDBC驱动程序完成。不同的JDBC驱动程序实现了相同的接口,虽然实现细节不同,但是提供了
相同的方法。JDBC驱动程序必须实现的4个主要接口是:Driver、Connection、Statement和Res
ultSet。Driver接口是提供给JDBC驱动程序实现的接口,用于装入和管理JDBC驱动程序。11.3.1JDB
C的作用和功能JDBC数据库应用程序设计与普通Java应用程序设计的不同之处:不能直接调用new运算符创建JDBCAPI中
类的实例,而由指定类的方法创建另一个类的实例。Connection、Statement、ResultSet等接口已由指
定JDBC驱动程序实现,因此数据库应用程序中可以直接声明这些接口的变量作为类的实例使用。3.JDBCAP
I的基本功能、组成和工作原理11.3.2指定JDBC驱动程序1.选择和安装JDBC驱动程序数据库协议
驱动程序是最快的方式,接下来依次是网络协议驱动程序、本地库Java实现驱动程序、JDBC-ODBC桥驱动程序。如果在Java
应用程序中访问一个数据库,就要安装该数据库所支持的JDBC驱动程序。不同的数据库提供不同的驱动程序。有些数据库只提供一种
驱动程序,有些数据库提供多种驱动程序。11.3.2指定JDBC驱动程序1.选择和安装JDBC驱动程序JDB
C-ODBC桥驱动程序名为“sun.jdbc.odbc.JdbcOdbcDriver”,是JDK默认安装的,包含在JDK运行时库
C:\ProgramFiles\Java\jdk1.5.0\jre\lib\rt.jar中。解压文件rt.jar后,在sun
\jdbc\odbc文件夹中可看到JdbcOdbcDriver.class文件,所以运行基于JDBC-ODBC桥的应用程序时不需
要特别安装和设置,其他3种JDBC驱动程序需要特别安装和设置。11.3.2指定JDBC驱动程序2.安装Microso
ftSQLServer2000JDBC驱动程序(2)在JCreator中添加路径11.3.2指定JDBC驱动程
序3.在应用程序中指定JDBC驱动程序为Access数据库指定JDBC-ODBC桥驱动程序:Class.forNa
me(“sun.jdbc.odbc.JdbcOdcDriver”);为SQLServer数据库指定JDBC桥驱动程序:Clas
s.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);
//SQLServer2000加载驱动java.lang.Class类的forName()方法用于指定JDBC驱动程序类型:
11.3.3连接数据库连接指定数据库的功能由DriverManager类和
Connection接口实现;DatabaseMetaData接口用于获取数据库的属性信息。11.3.3连接数据库
1.DriverManager类创建与指定数据库连接DriverManager类用于管理驱动程序和创建数据库连接;getC
onnection方法提供装入指定JDBC驱动程序并创建与指定数据库连接的操作。url指定JD
BC数据源的URL,user指定访问数据库的用户名,password指定用户密码;11.3.3连接数据库1.Drive
rManager类创建与指定数据库连接JDBC使用URL表示JDBC驱动程序和数据源的位置。JDBC的URL格式:j
dbc:子协议:数据源表示这个URL指定一个JDBC数据源,<子协议>指定JDBC驱动程序类型,<数据源>指定数
据源名。11.3.3连接数据库1.DriverManager类创建与指定数据库连接例如:下列语句返回创建的一个数据库连接对象,其中参数指定JDBC桥驱动程序、访问Access数据库的数据源student_access。Connectionconnection1=DriverManager.getConnection("jdbc:odbc:student_access");11.3.3连接数据库例如:下列语句返回创建的一个数据库连接对象,其中参数指定SQLServerJDBC驱动程序、数据源为“//localhost:1433;DatabaseName=student”、用户名为“sa”、用户密码为“yeheya”。Connectionconnection2=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=student","sa","yeheya“);1.DriverManager类创建与指定数据库连接11.3.3连接数据库2.Connection接口管理连接对象Connection接口负责管理Java应用程序和数据库之间的连接。一个Connection对象表示对一个特定数据源已经建立的一条连接,它能创建执行SQL的Statement语句对象,还能提供数据库中的属性信息。11.3.3连接数据库Statementstatement=connection.createStatement();DatabaseMetaDatadbmd=connection.getMetaData();11.3.3连接数据库3.DatabaseMetaData接口获得数据库元数据11.3.3连接数据库3.DatabaseMetaData接口获得数据库元数据
献花(0)
+1
(本文系信息检索04...首藏)