情境导入
项目应用的需求:连接Oracle数据库
连接方式
1. SQL*PLUS客户端连接
2. 利用JDBC连接
工作任务
了解Oracle JDBC驱动程序
使用Oracle JDBC
在JDBC中调用存储过程
实例
了解Oracle JDBC驱动程序
JDBC(Java Database Connectivity)
1,JDBC对 ODBC API面向对象的封装和重新设计,使它易于学习和使用,而且能够编写不依赖厂商的代码,用以查询和操纵数据库。
2,与所有 Java API 一样,它是面向对象的,但并不是很高级别的对象集.?
3,JDBC可以访问包括Oracle在内的各种不同数据库,但Oracle数据库包含许多独特的特性,只能通过使用标准JDBC的Oracle扩展来使用。Oracle扩展可尽可能的发挥JDBC能力。
Oracle JDBC驱动程序
1,Thin 驱动程序
2,OCI驱动程序
3,服务器端内部驱动程序
4,服务器端Thin驱动程序
注册JDBC驱动程序
有两种注册Oracle JDBC驱动程序的方法。
1,第一种使用:
Class.forName(“oracle.jdbc.OracleDriver”);
2,第二种方法使用DriverManager。DriverManager 类是 JDBC 的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。另外,DriverManager 类也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
打开数据流
DriverManager.getConnection(URL,username,password);
JDBC URL 的标准语法如下所示。它由三部分组成,各部分间用冒号分隔:
jdbc:< 子协议 >:< 子名称 >
JDBC URL 的三个部分可分解如下: jdbc ─ 协议。JDBC URL 中的协议总是 jdbc。子协议即将使用的驱动程序,子名称是oracle数据库服务名。
Username 程序连接数据库时使用的数据库用户名。
Password 用户名口令。
执行sql语句
1、创建 Statement 对象
Statement stmt = con.createStatement();
2、使用 Statement 对象执行语句
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table2");
3、关闭 Statement 对象
stmt.close();
获得查询结果集
ResultSet rs=stmt.executeQuery(“select 语句”);
while(rs.netxt())
{
数据类型 variable_name=rs.get××(字段脚标或字段名);
}
关闭数据流
关闭数据流连接是采用Connection对象的close
方法。即时关闭数据流可以减少内存占用。语句如下:
con.close();
在JDBC中调用存储过程
CallableStatement对象为所有的 DBMS 提供了一种以标准形式调用存储过程的方法。有两种调用形式:一种形式带结果参数,另一种形式不带结果参数。
在 JDBC 中调用存储过程的语法如下所示。注意,方括号表示其间的内容是可选项;方括号本身并非语法的组成部份
{call 过程名[(?, ?, ...)]}
返回结果参数的存储过程的语法为:
{? = call 过程名[(?, ?, ...)]}
不带参数的存储过程的语法类似:
{call 过程名}
创建 CallableStatement 对象
CallableStatement 象是用Connection 方法prepareCall创建的。下例创建 CallableStatement的实例,其中含有对存储过程getEMPData 调用。该过程有两个变量,但不含结果参数:
CallableStatement cstmt = con.prepareCall("{call getEMPData(?, ?)}");
其中?占位符为IN、OUT还是INOUT参数,取决于存储过程getEMPData。
IN和OUT参数
1,将IN参数传给CallableStatement对象是通过setXXX方法完成的。所传入参数的类型决定了所用的setXXX方法(例如,用setFloat来传入float值等)。
2,如果存储过程返回OUT参数,则在执行CallableStatement对象以前先注册每个OUT参数的JDBC类型,使用registerOutParameter方法来注册。语句执行完后,CallableStatement的getXXX 方法将取回参数值。 registerOutParameter使用的是JDBC类型(因此它与数据库返回的JDBC类型匹配),而getXXX 将之转换为Java 类型。
INOUT参数
既支持输入又接受输出的参数(INOUT参数)
既要调用registerOutParameter方法,还要调用合适的setXXX 方法。setXXX 方法将参数设置为输入参数, registerOutParameter方法将它的JDBC类型注册为输出参数。应该引起注意的是,IN值的JDBC类型和提供给registerOutParameter方法的JDBC类型必须相同。
检索输出值时,使用对应的getXXX 方法。
例如,Java 类型为int的参数应该使用方法 setInt来赋输入值。应该给registerOutParameter提供类型为INTEGER 的 JDBC 类型。
处理SQL异常
java.sql.SQLException类定义了四个方法,可以帮助查找判断出错原因。
getErrorCode()
getMessage()
getSQLState()
printStackTrace()
实例
在scott用户模式下,添加一条记录到EMP表,然后显示10号部门的所有员工姓名。
提示:在eclipse编程环境下,需导入classes11.jar
小结
JDBC是一个软件层,允许开发者在Java中编写客户端/服务器程序,它提供了简单的接口用于执行原始的SQL语句。Oracle支持简单的JDBC访问和开发,提供了很多图形化的应用程序支持开发Java程序,如Container for J2EE、Jdeveloper,涵盖了性能调整、如何开发J2EE组件和Java存储过程等技术。