您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 利用JDBC进行Oracle访问.
第11章利用JDBC进行Oracle访问第11章利用JDBC进行Oracle访问11.1概述11.2OracleJDBC驱动程序11.3OracleJDBC的使用11.4实例11.5小结习题十一上机实验十一第11章利用JDBC进行Oracle访问11.1概述对ODBCAPI面向对象的封装和重新设计使JDBC(JavaDataBaceConnectivity)易于学习和使用,而且利用JDBC能够编写不依赖于厂商的代码,用以查询和操纵数据库。与所有JavaAPI一样,它是面向对象的,但并不是很高级别的对象集。JDBC可以访问包括Oracle在内的各种不同数据库,但Oracle数据库包含许多独特的性质,只能通过使用标准JDBC的Oracle扩展来使用。Oracle扩展可尽可能地发挥JDBC的能力。第11章利用JDBC进行Oracle访问11.2OracleJDBC驱动程序OracleJDBC驱动程序使Java程序中的JDBC语句可以访问Oracle数据库。OracleJDBC驱动程序有以下四种。1.Thin驱动程序Thin驱动程序对资源消耗最小,完全由Java编写。它可以在独立的Java应用程序(包括JavaApplet)中使用,并且可以访问所有版本的Oracle数据库。第11章利用JDBC进行Oracle访问2.OCI驱动程序OCI驱动程序比Thin驱动程序占用资源多,但性能好一点。它适合于部署在中间层的软件,如Web服务器。OCI驱动程序是第二类驱动程序,不完全是用Java编写的,还包含用C写的代码。3.服务器端内部驱动程序服务器端内部驱动程序提供对数据库的直接访问,OracleJVM使用它与数据库进行通信。OracleJVM是与数据库集成的虚拟机,可以使用OracleJVM将Java类装载进数据库,然后公布和运行这个类中包含的方法。第11章利用JDBC进行Oracle访问4.服务器端Thin驱动程序服务器端Thin驱动程序也是由OracleJVM使用的,它提供对远程数据库的访问。与Thin驱动程序一样,这种驱动程序也完全使用Java编写。第11章利用JDBC进行Oracle访问11.3OracleJDBC的使用11.3.1导入JDBC包要能使用JDBC,必须将所需的JDBC包导入Java程序。importjava.sql.*;第11章利用JDBC进行Oracle访问11.3.2注册JDBC驱动程序有两种注册OracleJDBC驱动程序的方法。第一种使用Class.forName(oracle.jdbc.OracleDriver);第二种方法使用DriverManager。DriverManager类是JDBC的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。另外,DriverManager类也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。DriverManager.registerDriver(neworacle.jdbc.OracleDriver());第11章利用JDBC进行Oracle访问如果使用OracleJDBC驱动程序,则需要导入oracle.jdbc.driver.OracleDriver类,然后注册这个类的实例。Importoracle.jdbc.driver.OracleDriver;DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());第11章利用JDBC进行Oracle访问11.3.3打开数据流加载Driver类并在DriverManager类中注册后,即可与数据库建立连接。与数据库建立连接的标准方法是调用DriverManager.getConnection。该方法接受含有某个URL的字符串。DriverManager类(即所谓的JDBC管理层)将尝试找到可与那个URL所代表的数据库进行连接的驱动程序。DriverManager类存有已注册的Driver类的清单。当调用方法getConnection时,它将检查清单中的每个驱动程序,直到找到可与URL中指定的数据库进行连接的驱动程序为止。Driver的方法connect使用这个URL来建立实际的连接。DriverManager.getConnection(URL,username,password);第11章利用JDBC进行Oracle访问JDBCURL提供了一种标识数据库的方法,可以使相应的驱动程序识别该数据库并与之建立连接。实际上,驱动程序编程员决定用什么JDBCURL来标识特定的驱动程序。用户不必关心如何形成JDBCURL,他们只需使用与所用驱动程序一起提供的URL即可。JDBC的作用是提供某些约定,驱动程序编程员在构造JDBCURL时应该遵循这些约定。JDBCURL的标准语法如下所示,它由三部分组成,各部分间用冒号分隔。Jdbc:子协议:子名称JDBCURL的三个部分可分解如下:jdbc为协议,JDBCURL中的协议总是jdbc;子协议为即将使用的驱动程序;子名称是Oracle数据库服务名。第11章利用JDBC进行Oracle访问username表示程序连接数据库时使用的数据库用户名。password表示用户名口令。以下例子使用getConnection()方法连接数据库。Connectioncon=DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:ORCL,scott,tiger);这个例子使用的是OracleJDBCThin驱动程序。第11章利用JDBC进行Oracle访问11.3.4执行SQL语句Statement对象用于将SQL语句发送给数据库。Statement对象有三种:Statement、PreparedStatement(从Statement继承而来)和CallableStatement(从PreparedStatement继承而来),它们是给定连接上执行SQL语句的包容器,它们都专用于发送特定类型的SQL语句。Statement对象用于执行不带参数的简单SQL语句;PreparedStatement对象用于执行带或不带IN参数的预编译SQL语句;CallableStatement对象用于执行对数据库已存储过程的调用。第11章利用JDBC进行Oracle访问1.创建Statement对象建立了到特定数据库的连接之后,就可用该连接发送SQL语句。Statement对象用Connection的方法createStatement创建,如下列代码段所示:Statementstmt=con.createStatement();为了执行Statement对象,被发送到数据库的SQL语句将被作为参数提供给Statement。第11章利用JDBC进行Oracle访问2.使用Statement对象执行语句Statement接口提供了三种执行SQL语句的方法:executeQuery、executeUpdate和execute。使用哪一种方法由SQL语句所产生的内容决定。方法executeQuery用于产生单个结果集的语句,例如:ResultSetrs=stmt.executeQuery(SELECTa,b,cFROMTable2);第11章利用JDBC进行Oracle访问方法executeUpdate用于执行INSERT、UPDATE或DELETE语句以及SQLDDL(数据定义语言)语句,例如CREATETABLE和DROPTABLE。INSERT、UPDATE或DELETE语句的效果是修改表中零行或多行中的一列或多列。executeUpdate的返回值是一个整数,指示受影响的行数(即更新计数)。对于CREATETABLE或DROPTABLE等不操作行的语句,executeUpdate的返回值总为零。intline=stmt.executeUpdate(insertintouserinfovalues('juliet','juliet'));如果预先不知道要执行的SQL语句类型,则可使用方法execute,用于执行返回多个结果集、多个更新计数或二者组合的语句。第11章利用JDBC进行Oracle访问3.关闭Statement对象Statement对象由Java垃圾收集程序自动关闭。作为一种好的编程风格,应在不需要Statement对象时显式地关闭它们。这将立即释放DBMS资源,有助于避免潜在的内存问题。语句如下:stmt.close();第11章利用JDBC进行Oracle访问11.3.5获得查询结果集ResultSet包含符合SQL语句中条件的所有行,并且通过一套get方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。ResultSet.next方法用于移动到ResultSet中的下一行,使下一行成为当前行。结果集一般是一个表,其中有查询所返回的列标题及相应的值。第11章利用JDBC进行Oracle访问ResultSet维护指向其当前数据行的光标。每调用一次next方法,光标向下移动一行。最初它位于第一行之前,因此第一次调用next时应把光标置于第一行上,使它成为当前行。随着每次调用next将导致光标向下移动一行,可按照从上至下的次序获取ResultSet行。在ResultSet对象或其父辈Statement对象关闭之前,光标一直保持有效。使用方法如下:ResultSetrs=stmt.executeQuery(select语句);while(rs.netxt()){数据类型variable_name=rs.get××(字段脚标或字段名);}第11章利用JDBC进行Oracle访问11.3.6关闭数据流关闭数据流连接可采用Connection对象的close方法。即时关闭数据流可以减少内存占用,关闭数据流的语句如下:con.close();第11章利用JDBC进行Oracle访问11.3.7在JDBC中调用存储过程CallableStatement对象为所有的DBMS提供了一种以标准形式调用存储过程的方法。有两种调用形式:一种带结果参数,另一种不带结果参数。在JDBC中,调用存储过程的语法如下所示。注意,方括号表示其间的内容是可选项,方括号本身并非语法的组成部分。{call过程名[(?,?,...)]}返回结果参数的存储过程的语法如下:{?=call过程名[(?,?,...)]}不带参数的存储过程的语法如下:{call过程名}第11章利用JDBC进行Oracle访问1.创建CallableStatement对象CallableStatement对象是用Connection方法prepareCall创建的。下面为创建CallableStatement的实例,其中含有对存储过程getEMPData调用。该过程有两个变量,但不含结果参数。CallableStatementcstmt=con.prepareCall({callgetEMPData(?,?)});其中,?占位符为IN、OUT还是INOUT参数取决于存储过程getEMPData。第11章利用JDBC进行Oracle访问2.IN和OUT参数将IN参数传给CallableStatement对象是通过setXXX方法来完成的。所传入参数的类型决定了所用的setXXX方法(例如,用setFloat来传入float值等)。如果存储过程返回OUT参数,则在执行CallableStatement对象以前先注册每个OUT参数的JDBC类型,使用registerOutParameter方法来注册。语句执行完后,CallableStatement的getXXX方法将取回参数值。registerOutParameter使用的是JDBC类型(因此它与数据库返回的JDBC类型匹配),而getXXX将之转换为Java类型。第11章利用JDBC进行Oracle访问下
本文标题:利用JDBC进行Oracle访问.
链接地址:https://www.777doc.com/doc-2608765 .html