《Java数据库访问》PPT课件.ppt
第10讲 Java数据库访问p深刻理解深刻理解JDBC的概念及的概念及JDBCAPI主要内容主要内容p熟练掌握熟练掌握JDBC应用程序开发流程应用程序开发流程p熟练掌握应用熟练掌握应用JDBC实现数据库记录实现数据库记录的插入、删除和修改操作的插入、删除和修改操作p熟练掌握应用熟练掌握应用JDBC查询数据库记录查询数据库记录学习目的与要求学习目的与要求JDBC基础基础nJDBC(Java Database Connectivity)是是一个独立于特定数据库一个独立于特定数据库管理系统的、通用的管理系统的、通用的SQL数据库存取和操作的公共接口(一数据库存取和操作的公共接口(一组组API),),定义了用来访问数据库的标准定义了用来访问数据库的标准Java类库,使用这类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源(在个类库可以以一种标准的方法、方便地访问数据库资源(在类包中)。类包中)。nJDBC为访问不同的数据库提供了一种统一的途径,象为访问不同的数据库提供了一种统一的途径,象ODBC(Open Database Connectivity)一样,一样,JDBC对开发者屏对开发者屏蔽了一些细节问题。蔽了一些细节问题。nJDBC的目标是使应用程序开发人员使用的目标是使应用程序开发人员使用JDBC可以连接任何可以连接任何提供了提供了JDBC驱动程序的数据库系统,这样就使得程序员无需驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。加快了开发过程。JDBC基础基础应用程序应用程序驱动程序管理器驱动程序管理器驱动程序驱动程序驱动程序驱动程序驱动程序驱动程序数据源数据源数据源数据源数据源数据源ODBCODBC的体系结构含有四个部件:的体系结构含有四个部件:应用程序(应用程序(ApplicationApplication):执行执行ODBCODBC函数的调用和函数的调用和处理,提交处理,提交SQLSQL语句并检索结果。语句并检索结果。驱动程序管理驱动程序管理器器(Driver ManagerDriver Manager):为应用程序为应用程序装载驱动程序。装载驱动程序。驱动程序(驱动程序(DriverDriver):驱动程序是实现驱动程序是实现ODBCODBC函数调用函数调用和同数据源交互作用的动态连接库,它执行和同数据源交互作用的动态连接库,它执行ODBCODBC函数函数调用,提交调用,提交SQLSQL请求到指定的数据源,并把结果返回请求到指定的数据源,并把结果返回给应用程序。如果需要,驱动程序也可改变应用程序给应用程序。如果需要,驱动程序也可改变应用程序的请求,以和特定的的请求,以和特定的DBMSDBMS的语法匹配。的语法匹配。数据源(数据源(Data SourceData Source):由用户需要存取的数据和由用户需要存取的数据和与之相连的操作系统、与之相连的操作系统、DBMSDBMS及存取及存取DBMSDBMS的网络平台组的网络平台组成。成。开开放放数数据据库库互互连连(ODBC)是是为为了了实实现现异异构构数数据据库库互互连连而而由由Microsoft公公司司推推出出的的一一种种标标准准,它它是是一一个个单单一一的的、公公共共的的编编程程接接口口。ODBC提提供供不不同同的的程程序序以以存存取取不不同同的的数据库,但只提供一种应用编程接口(数据库,但只提供一种应用编程接口(API)给应用程序。)给应用程序。ODBCJDBC基础基础与ODBC相类似,JDBC接口(API)也包括两个层次:面向应用的面向应用的API:Java API,抽象接口,供应用程序开发人员使用(连接数据库,执行SQL语句,获得结果)。面向数据库的面向数据库的API:Java Driver API,供开发商开发数据库驱动程序用。与与ODBC相比,相比,JDBC没有了没有了定定制的制的“数据源数据源”的概念,而是直的概念,而是直接在应用程序中接在应用程序中加载驱动程序并加载驱动程序并连接特定的数据连接特定的数据库。库。q Driver Manager()装载驱动程序,管理应用程序与驱动程序之间的连接。q Driver(由驱动程序开发商提供)由驱动程序开发商提供)将应用程序的API请求转换为特定的数据库请求。q Connection()将应用程序连接到特定的数据库q Statement(java.sql.Statement)在一个给定的连接中,用于执行一个静态的数据库SQL语句。q ResultSet(java.sql.ResultSet)SQL语句中心完后,返回的数据结果集(包括行、列)。q Metadata(Metadata;.ResultSetMetadata)关于查询结果集、数据库和驱动程序的元数据信息。JDBC基础:基础:主要概念主要概念JDBC基础:基础:基本工作步骤基本工作步骤qImport the necessary classesqLoad the JDBC driverqIdentify the database sourceqAllocate a“Connection”object(create)qAllocate a“Statement”object(create)qExecute a query using the“Statement”objectqRetrieve data from the returned“ResultSet”objectqClose the“ResultSet”objectqClose the“Statement”objectqClose the“Connection”objectDriverManagerConnectionStatementResultSetDriverDatabaseCreatesCreatesCreatesSQLResult(tuples)EstablishLink to DBJDBC基础:基础:基本工作步骤基本工作步骤JDBC基础:基础:基本工作步骤基本工作步骤1.Load the JDBC driver class:Class.forName(“driverName”);2.Open a database connection:(“jdbc:xxx:datasource”);3.Issue SQL statements:stmt=();(“Select*from myTable”);4.Process result set:while()name=rs.getString(“name”);amount=rs.getInt(“amt”);ConnectionStatementResult SetDriverDriver ManagerDatabaseJDBC支持四种类型的驱动程序:支持四种类型的驱动程序:nJDBC-ODBC Bridge,plus ODBC driver(Type 1)nSimplestnJDBC methods-Translate JDBC methods to ODBC methods-ODBC to native methods-Native methods APInNative-API,partly Java driver(Type 2)nJDBC methods-Map JDBC methods to native methods(calls to vendor library)-Native methods API(vendor library)nJDBC-net,pure Java driver(Type 3)nJDBC methods-Translate to Native API methods through TCP/IP network-Native API methodsnNative-protocol,pure Java driver(Type 4)nJava methods-Native methods in JavaJDBC驱动程序驱动程序JDBC驱动程序驱动程序JDBC-ODBC Bridge,plus ODBC driver(Type 1)n由 Sun的Java2 JDK提供()n通过ODBC驱动程序来获得对数据库的JDBC访问n必须先安装ODBC驱动程序和配置ODBC数据源。n仅当特定的数据库系统没有相应的JDBC驱动程序时使用。Application SpaceJava ApplicationJDBC ODBC BridgeDatabaseSQLCommandResultSetODBC DriverProprietaryProtocolJDBC驱动程序驱动程序Native-API,partly Java driver(Type 2)nNative-API driver 将JDBC命令转换为特定数据库系统的本地库方法。n与Type1相类似,必须先安装特定数据库的库方法(二进制代码,非Java)。Application SpaceJava ApplicationType 2 JDBC DriverDatabaseSQLCommandResultSetNative DatabaseLibraryProprietaryProtocolJDBC驱动程序驱动程序JDBC-net,pure Java driver(Type 3)n将JDBC命令转换为与数据库系统无关的网络协议,并发送给一个中间件服务器。n中间件服务器再将数据库系统无关的网络协议转换为特定数据库系统的协议,并发送给数据库系统。n从数据库系统获得的结果先发送给中间件服务器,并进而返回给应用程序。Application SpaceJava ApplicationType 3 JDBC DriverDatabaseSQLCommandResultSetMiddleware SpaceProprietaryProtocolJDBC DriverNative-protocol,pure Java driver(Type 4)n纯Java的驱动程序,直接与特定的数据库系统通信。n直接将JDBC命令转换为数据库系统的本地协议。n优点:没有中间的转换或者是中间件。n通常用于提高数据库访问的性能。Application SpaceJava ApplicationType 4 JDBC DriverDatabaseSQL CommandUsing ProprietaryProtocolResult SetUsing ProprietaryProtocolJDBC驱动程序驱动程序JDBC编程编程任何一个JDBC应用程序,都需要以下四个步骤:q 加载JDBC驱动程序q 建立与数据库的连接q 进行数据库操作q 关闭相关连接Step1装载驱动程序装载驱动程序装载驱动程序应用应用Class类的类的forName()方法注册方法注册JDBC-ODBC桥驱动程序桥驱动程序);注册注册Oracle数据库厂商提供的数据库厂商提供的JDBC驱动程序驱动程序Class.forName();Class.forName();建立桥接器时可能发生异常建立桥接器时可能发生异常,需要捕获这个异常需要捕获这个异常Try Try ););Catch(ClassNotFoundEXceptionCatch(ClassNotFoundEXception e)e)利用DriverManager类的静态方法getConnection()来获得与特定数据库的连接实例(Connection实例)。Connection conn=DriverManager.getConnection(url);Connection conn=DriverManager.getConnection(url,user,pass);这三个参数都是String类型的,使用不同的驱动程序与不同的数据库建立连接时,url的内容是不同的,但其格式是一致的,都包括三个部分:jdbc:driverType:dataSource 对于JDBC-ODBC Bridge,driverType为odbc,dataSource则为ODBC数据源:“jdbc:odbc:myDSN”。对于其他类型的驱动程序,根据数据库系统的不同driverType和dataSource有不同的格式和内容。Step2 建立与数据库的连接建立与数据库的连接 Step3 进行数据库操作进行数据库操作每执行一条SQL语句,都需要利用Connetcion实例的createStatement()方法来创建一个Statement实例。Statement的常用方法包括:n执行SQL INSERT,UPDATE 或 DELETE 等语句nint executeUpdate(String sql)n执行SQL SELECT语句nResultSet executeQuery(String sql)n执行一个可能返回多个结果的SQL语句nboolean execute(Stringsql)(与其他方法结合起来来获得结果)nStatement 中还有其他的方法来执行SQL语句。Step4:进行数据库操作:进行数据库操作通过ResultSet来获得查询结果:nResultSet实例最初定位在结果集的第一行(记录)nResultSet提供了一些在结果集中定位的方法,如next()等。nResultSet提供了一些方法来获得当前行中的不同字段的值,getXXX()。nResultSet中还提供了有关方法,来修改结果集,并提交到数据库中去。Step4:进行数据库操作:进行数据库操作参数:int colIndex 或String colNameStep4:进行数据库操作:进行数据库操作通过ResultSetMetadata来获得查询结果的元数据信息:nResultSet提供了一个方法getMetadata()来获得结果集的元数据信息,它返回的是一个ResultSetMetadata实例。n通过ResultSetMetadata实例,就可以获得结果集中字段的详细信息,如字段总数,每个字段的名称、类型等。getColumnCount()/#of columns in the rowgetColumnName(i)/returns column namegetColumnType(i)/returns column data typegetColumnLabel(i)/suggested label for a column when printgetTableName()/returns the name of the tablen确定了字段类型,获取字段数据时,就可以明确如何使用ResultSet中的getXXX()方法了。通过DatabaseMetadata来获得数据库的元数据信息:nConnection提供了一个方法getMetadata()来获得数据库的元数据信息,它返回的是一个DatabaseMetadata实例。n通过DatabaseMetadata实例,就可以获得数据库的各种信息,如数据库厂商信息、版本信息、数据表数目、每个数据表名称等。getDatabaseProductName()getDatabaseProductVersion()getDriverName()getTables()Step4:进行数据库操作:进行数据库操作JDBC示例示例【例【例1】使用使用Access数据库创建数据库创建student数据库及表。数据库及表。创建数据库创建数据库创建创建Access数据库文件,数据库文件名为数据库文件,数据库文件名为s。创建表创建表输入数据输入数据配置配置ODBC数据源数据源 1)打开控制面板打开控制面板,选择选择ODBC项项2)选择选择Add3)选择选择MicrosoftAccessDriver.(若没有此项若没有此项,应先安装应先安装ODBC驱动驱动程序程序)4)在在DataSourceNameok完成操作完成操作.【例【例2】JDBC插入、修改和删除数据库数据插入、修改和删除数据库数据提示:提示:与数据库建立连接与数据库建立连接所有所有JDBC类的对象。类的对象。Connectioncon1=(jdbc:odbc:+datasource);加载驱动程序加载驱动程序);Statement对象调用方法对象调用方法:publicintexecuteUpdate(StringsqlStatement)添加添加executeUpdate(“insertintotable1values(111,33,60)”);删除删除executeUpdate(“deletefromtable1set学号学号=88”);更新更新executeUpdate(“updatetable1set数学数学=88where姓名姓名=王名王名”);与数据库建立连接 所有所有JDBC类的对象。类的对象。Connection con1=(jdbc:odbc:+datasource);加载驱动程序);Statement对象调用方法:public int executeUpdate(String sqlStatement)添加executeUpdate(“insert into table1 values(111,33,60)”);删除executeUpdate(“delete from table1 set 学号=88”);更新executeUpdate(“update table1 set 数学=88 where 姓名=王名”);