资源描述
wwwits.tzc-第10讲Java数据库访问3Java学习目的与要求深刻理解JDBC的概念及JDBC API 主要内容熟练掌握J DBC应用程序开发流程熟练掌握应用JDBC实现数据库记录的插入.删除和修改操作熟练掌握应用JDBC查询数据库记录JDBCv*ww.its JDBC(Java Database Connectivity)是一个独立于特定数据库 管理系统的.通用的SQL数据库存取和操作的公共接口( 一 组API),定义了用来访问数据库的标准Java类库,使用这 个类库可以以一种标准的方法.方便地访问数据库资源(在 java.sql类包中)。JDBC为访问不同的数据库提供了一种统一的途径,象 ODBC(Open Database Connectivi切一样 # JDBC对开发者屏 蔽了一些细节问题。JDBC的目标是使应用程序开发人员使用JDBC可以连接任何 提供了JDBC驱动程序的数据库系统,这样就使得程序员无需 对特定的数据库系统的特点有过多的了解,从而大大简化和 加快了开发过程。JDBC开放数据库互连(ODBC )是为了实现异构数据库互连而由Microsoft公司推出的一 种标准,它是一个单一的.公共的编程接口。ODBC提供不同的程序以存取不同的 数据库,但只提供一种应用编程接口( API )给应用程序。应用程瘵驱动程瘵管理器驱动程序驱动程陰驱动程序数据源 数据源 数据源ODBCODBC的体系结构含有四个部件:应用程序(Application):执行ODBC函数的调用 和处理,提交SQL语句并检索结果。驱动程序管理器(Driver Manager):为应用程 屋装载驱动程屋。驱动程序(Driver):驱动程底是实现ODBC函数 调用和同数据源交互作用的动态连接库,它执行ODBC 函数调用,提交SQL请求到指定的数据源.并把结果 返回给应用程瘵。如果需要,驱动程底也可改变应用 程寤的请求,以和特定的DBMS的语法匹配。数据源(Data Source ):由用户需要存取的数据 和与之相连的操作系统.DBMS及存取DBMS的网络平台 组成。基础JDBC与ODBC相类似z JDBC接口( API )也包括两个层次:面向应用09A1 : Java API ,抽象接口,供应用程序开发人员使用(连 接数据库,执行SQL语句,获得结果)o面向数据库的AP : Java Driver API,供开发商开发数据库驱动程序用。与ODBC相比f JDBC没有了走 制的"数据源"的概念,而是直接在应用程序中加载驱动程序并 连接特定的数据 库。7JDBC基础:基本工作步骤v*ww.its Driver Manager ( java.sql.DriverManager )装载驱动程序,管理应用程序与驱动程序之间的连接。 Driver (由驱动程序开发商提供)将应用程序的API请求转换为特定的数据库请求。 Connection ( java.sql.Connection )将应用程序连接到特定的数据库 Statement ( java.sql.Statement )-在一个给走的连接中”用于执行一个静态的数据库SQL语句。 ResultSet ( java.sql.ResultSet ) SQL语句中心完后,返回的数据结果集(包括行、列)。口 Metadata ( java.sql.DatabaseMetadata; java.sql. ResultSetMetadata )-关于查询结果集、数据库和驱动程序的元数据信息。v*ww.its Import the necessaiy classesLoad the JDBC driverIdentify the database source Allocate a "Connection" object (create) Allocate a "Statement" object (create) Execute a query using the "Statement" object Retrieve data from the returned “ResultSet" object Close the “Resultset" object Close the "Statemenf, object Close the "Connection objectJDBC基础:基本工作步骤Link to DBResult(tuples)Result (tuples)11JDBC驱动程序v*ww.its JDBC支持四种类型的驱动程序:JDBC-ODBC Bridge, plus ODBC driver (Type 1) Simplest JDBC methods -> Translate JDBC methods to ODBC methods -> ODBC to native methods -> Native methods APINative-API, partly Java driver (Type 2) JDBC methods -> Map JDBC methods to native methods (calls to vendor libraiy)> Native methods API (vendor libraiy)JDBC-net, pure Java driver (Type 3) JDBC methods -> Translate to Native API methods tlu*ough TCP/IP network -> Native API methodsNative-protocol, pure Java driver (Type 4) Java methods > Native methods in JavaJDBC-ODBC Bridge, plus ODBC driver (Type 1)由Sim的Java2 JDK提供 (sun.jdbc.odbc.JdbcOdbcDriver)通过ODBC驱动程序来获得对 数据库的JDBC访问 必须先安装ODBC驱动程序和 配置ODBC数据源。-仅当特定的数据库系统没有相 应的JDBC驱动程序时使用。v*ww.its Native-API, partly Java driver (Type 2) Native-API driver 将JDBC 命令转换为特定数据库系 统的本地库方法。与Type 1相类似,必须先安 装特定数据库的库方法( 二进制代码/非Java ) 0JDBC-net, pure Java driver (Type 3)将JDBC命令转换为与数据库系统 无关的网络协议,并发送给一个中 间件服务器。中间件服务器再将数据库系统无关 的网络协议转换为特定数据库系统 的协议,并发送给数据库系统。Middleware Space JDBC DriverProprietaryProtocolDatabase从数据库系统获得的结果先发送给 中间件服务器,并进而返回给应用 程序。15JDBC 区动程摩Native-protocol, pure Java driver (Type 4)纯Java的驱动程序z直接与 特定的数据库系统通信。直接将JDBC命令转换为数 据库系统的本地协议。优点:没有中间的转换或者 是中间件。通常用于提高数据库访问的 性能。JDBC编程任何一个JDBC应用程序,都需要以下四个步骤: 加载JDBC驱动程序 建立与数据库的连接 进行数据库操作 关闭相关连接17Stepl装载驱动程序装载驱动程序-应用Class类的forName()方法注册JDBC-ODBC桥驱动程序Class forName(nsun.jdbc odbc JdbcOdbcDrivern);注册Oeule数据库厂商提供的JDBC驱动程序Class forName ("oracle jdbc driver OracleDrivern);A建立桥接器时可能发生异常,需要捕获这个异常Try class forName("sun jdbc odbc JdbcOdbcDriver");16Catch(ClassNotFoundEXception e) 仃Step2建立与数据库的连接利用DriverManager类的静态方法getCoimection()来获得与 特定数据库的连接实例(Connection实例)o/ Connection conn = DriverManager.getConnection(url);/ Connection conn = DriverManager.getConnection(url, user, pass);这三个参数都是SWng类型的,使用不同的驱动程序与不 同的数据库建立连接时小H的内容是不同的,但其格式是一 致的,都包括三个部分:jdbctdriverTypetdataSource对于JDBGODBC Bridge f driverType为odbc, dataSource 为ODBC数据源:jdbc:odbc:myDSN=对于其他类型的驱动程序,根据数据库系统的不同 driverTypeUdataSource有不同的格式和内容。Step3进行数据库操作每执行条SQL语句,都需要禾I用Connetcion实例的 createStatement()方法来创建一个Statement实例。Statement的 常用方法包括:执行SQL INSERT, UPDATE 或 DELETE 等语句 int executeUpdate(String sql)执行SQL SELECT语句 ResultSet executeQuery(String sql)执行一个可能返回多个结果的SQL语句boolean execute(Stringsql)(与其他方法结合起来来获得结果) Statement中还有其他的方法来执行SQL语句。仃Step4 :进行数据库操作v*ww.its 通过ResultSet来获得查询结果:ResultSef实例最初定位在结果集的第一行(记录)ResultSet提供了一些在结果集中定位的方法,如next()等。ResultSef提供了一些方法来获得当前行中的不同字段的 值,getXXX()0ResultSet中还提供了有关方法,来修改结果集,并提交到数 据库中去。23ResultSet 用 getXXX 方法返冋值类型方法名称boolea ngetBoolea n()bytegetByte()bytegetBytes()java.sql. DategetDate()doublegetDouble()floatgetFloat()intgetlnt()longgetLong()ObjectgetObject()shortgetShort()javaan g.Stri nggetString()java.sql.TimegetTime()参数:int collndex或String colName25Step4 :进行数据库操作v*ww.its 通过ResultSetMetadata来获得查询结果的元数据信息:Re suits ef提供了 一个方法getMeta data ()来获得结果集的 元数据信息,它返回的是一个ResultSefMe怕data实例。通jSResultSetMetadata实例z就可以获得结果集中字段的详细信息z如字段总数,每个字段的名称、类型等。 getColumnCount() / # of columns in the row getColumnName( z) / returns column name getColumnTjqpe (/)/ returns column data type getColumnLabel (z) /suggested label for a column when print getTableName() /returns the name of the table确定了字段类型,获取字段数据时,就可以明确如何使 用 ResultSet 中的 getXXX ()方法了。27通过DatabaseMetadata来获得数据库的元数据信息:Connection提供了 一个方法getMetadata(侏获得数据库的 元数据信息,它返回的是一个DafabaseMetadata实例。通过DatabaseMetadata实例,就可以获得数据库的各种 信息,如数据库厂商信息、版本信息、数据表数目、每 个数据表名称等。 getDatabaseProductNameO getDatabaseProductVersion() getDriverName() getTablesQJDBC示例【例1】使用Access数据库创建student数据库及表。-创建数据库-创建Access数据库文件,数据库文件名为student.mdbo_创建表-输入数据配置ODBC数据源1)打开控制面板,选择ODBCI页2)选择Add3)选桂Microsoft Access Driver.(若没有此I页,应先安装ODBC驱动 程席)4)栓Data Source Name项中填入数据源名,以后对此数据源的引 用要通过数据源名来实现最后按ok完成操作.29v*ww.its 例2】JDBC插入.修改和删除数据库数据提示:_省如据库建立连接_所有JDBC程序的蔓二驢是与数据库建立连接用户将得到_个java.sql.connection 类的对象。- Connection coni = DriverManager.getConnection (njdbc:odbc:n+datasource);- 加载驱动程序一Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");- Statement对象调用方法:一public int executellpdate(String sqIStatement)-添加一 executellpdate(uinsert into tablel values(m','33',60)”);-删除一 executellpdate(udelete from tablel set 学号='88'-更新-executeUpdate(uupdate tablel set 数学=88 where 姓名王名,”);#www.irs.tzc edu.crvdefau一一t.hrmmffiMlw口fift肅MaJDBC幕幕|帖常麗霁辎符專萝1=|9 java.sqLconneaionssoconnection conH DriverManager.gefconnection (二jdbaodbc=+das-soucer Qass.forName (二 sumjdbc.odbc.JdbcodbcDnven:); ss-temensgBa才m-pub-ic inf execuCDupdate(smng sq-sartement)暂tJexecuoupdao(二 nsert ino5rb-e1 va-ues(111<3360r); execuoupdaoude-eofroms-b-eXS2.唯如儿 88!)八 1execuoupdaCDppdaosrb-el S2.4JIH88 wheresMH.HHM、=
展开阅读全文