中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
JDBC 3.0 API与Oracle9i数据库
作者:未知 时间:2005-09-13 23:33 出处:Blog.ChinaUnix.net 责编:chinaitpower
              摘要:JDBC 3.0 API与Oracle9i数据库


JDBC(Java DataBase Connectivity)API是Java程序语言内的针对数据存取所设计的程序开发接口,主要是由一组Java语言编写的"类"和"接口"所构成。
JDBC 3.0 API已完全包含在JDK 1.4版本中。
使用JDBC API存取特定数据库系统前,必须拥有适当的JDBC驱动程序,可以在Sun网站查询http://java.sun.com/products/jdbc/jdbc.drivers.html,
也可以在OTN网站下载最新的JDBC驱动程序http://otn.oracle.com/software/tech/java/sqlj_jdbc/content.html
JDBC分为两大部分,一、开发接口,提供给程序开发人员必要的java"类"或"方法",开发接口包括下面两个包java.sql和javax.sql
                  二、实现接口,定义JDBC的规格与需求,主要是由Sun公司提供给关系型数据库系统厂商,各厂商可以遵循标准规格设计出最佳的JDBC驱动程序。
所以开发JDBC驱动程序的厂商是将各种API通过驱动程序的形式来实现;使用这些JDBC驱动程序的开发人员,则是利用API所提供的Java"类"与"方法"来开发数据库应用程序。

ODBC与JDBC两种驱动程序的差异
(1)ODBC是通过C语言接口,不适合java程序直接调用(ODBC的C语言API大量使用指针,易产生安全问题)
(2)可以将JDBC API想象成"高级的ODBC API面向对象版本"

JDBC驱动共分成4种
1、type-1 JDBC-ODBC bridge plus ODBC driver
JDBC-ODBC桥接驱动程序,其底层通过ODBC驱动程序来连接数据库,如果目的数据库未提供适当的JDBC驱动程序(如Access)可以考虑使用type-1 JDBC驱动程序,使用此类型JDBC驱动程序仍然可以为Oracle、DB2等数据库开发java应用程序,不需考虑数据库底层连接问题。
注意:利用JDBC-ODBC桥接驱动程序将跨过ODBC连接数据库,所以客户端必须先安装适当的ODBC驱动程序。
      java应用程序会先从JDBC Driver Manager驱动JDBC驱动程序,再调用ODBC Driver Manager去驱动ODBC驱动程序连接至数据库

2、type-2 Native-API partly-Java driver
此种方式会先将JDBC函数调用转换成数据库客户端函数库的API(位于客户端计算机),然后与数据库相连。OracleSybaseDB2等可使用此种驱动程序,必须在客户端操作系统内安装特定软件。
3、type-3 JDBC-Net pure Java driver
Type-3 JDBC驱动程序采用"间接连接"方式。首先JDBC驱动程序会将JDBC函数调用解释成与数据库无关的网络通信协议,经过中介服务器的第二次解析,最后才转换成相对应的关系型数据库通信协议,后台数据库发生变化时,只需更换中介层与数据库之间的JDBC驱动程序。
4、type-4 Native-protocol pure Java driver
此类JDBC驱动程序会将JDBC调用直接转换为关系型数据库本身使用的通信协议,也就是说客户端java应用程序可直接与数据库建立连接,适合局域网环境所使用,因为各厂商数据库可能有专属的通信协议,所以Type-4驱动程序通常是由关系型数据库厂商提供的,如果更换了后端数据库,也必须更换后端数据库。

基本的JDBC类与接口
DriverManager类   管理各种数据库驱动程序,建立新的数据库连接,以便将Java应用程序对应至正确的JDBC驱动程序,DriverManager允许在内存内同时加载多个JDBC驱动程序,分别指向不同数据库。
Driver接口  可以用来建立数据库连接。通常需传入表示连接方式的URL字符串,然后返回一个Connection对象。
Connection接口  代表应用程序与数据库之间的连接阶段(session),它允许用户将SQL查询语句建立成特定语句(Statement),或是读取该连接阶段内数据库与JDBC驱动程序的相关信息。
Statement接口  编写要执行的SQL语句,又分为两类:PreparedStatement与CallableStatement
PreparedStatement接口  包含预先编译的SQL语句,可重复执行
CallableStatement接口  用来调用数据库的预存程序(Stored procedure)

Java应用程序通过JDBC存取数据库时应该遵循以下几个步骤
(1)加载(注册)适当的JDBC驱动程序
(2)建立数据库连接
(3)建立与执行JDBC语句
(4)处理结果集
(5)关闭数据库连接

(1)注册JDBC驱动程序的方法通常分为下列两种
1、使用Class.forName(),其语法为Class.forName(驱动程序名称);
如Oracle JDBC驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
上述操作只是向JVM注册,并没有建立一个实例对象,如果需要在程序中参照Driver对象,必须用new进行实例化。
如 Driver oracledry = new oracle.jdbc.driver.OracleDriver();
2、使用DriverManager.registerDriver()
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

(2)建立数据库连接
使用DriverManger.getConnection(),内部运行机制大致如下
1、前端应用程序调用DriverManager.getConnection(JDBC URL字符串),JDBC URL表示要连接的Oracle9i数据库。
2、先解析(parse)JDBC URL,然后查找系统内所有已注册的JDBC驱动程序,直到符合JDBC URL指定的通信协议为止,查找的原则是先从系统属性列表(properties list)开始,然后才查找内存内已注册的JDBC驱动程序。
3、找到DriverManager就会建立一个新的数据库连接,如果最后也没有找到合适的JDBC驱动程序,java应用程序则会抛出一个SQLException异常事件。
JDBC URL由三部分组成:主通信协议、次通信协议和数据源
连接SQL server 2000数据库可设URL为jdbc:odbc:MSSQL,其中主通信协议为jdbc,次通信协议为odbc,MSSQL为ODBC的DSN
连接Oracle,可能是jdbc:oracle:thin:@rich:1521:ora9201,其中oracle:thin为次通信协议,代表Oracle JDBC thin driver,数据源则是rich服务器上的Oracle9i数据库,其Oracle SID为ora9201

建立数据库连接有两种方式DriverManager.getConnection()与Driver.Connection()
假设rich主机的Oracle9i数据库SID为ora9201,监听器所激活的连接端口为1521,可以用下列命令建立连接(用scott登录,密码为tiger)
1、Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@rich:1521:ora9201","scott",tiger");
2、Driver drv = new oracle.jdbc.driver.OracleDriver();
   Connection conn = null;
   Properties props = new Properties();
   props.setProperty("user","scott");
   props.setProperty("password","tiger");
   try{
     conn=drv.connect("jdbc.oracle:thin:@rich:1521:ora9201",props);
   }catch(SQLException e)
   {
       //如果无法建立连接,则进行异常事件处理
   }

(3)建立与执行JDBC语句
建立新数据库连接以后,必须先建立一个Statement对象才能送出SQL语句
Statement stmt=conn.createStatement();
建立Statement对象之后可利用3种方式送出SQL语句
executeQuery(SQL语句)、executeUpdate(SQL语句)、execute(SQL语句)
   如:ResultSet rset=stmt.executeQuery(SELECT * FROM emp);
如果要执行INSERTUPDATEDELETE或DDL语句,必须改用executeUpdate(),
   如:stmt.executeUpdate("CREATE TABLE table"+"(no CHAR(10),name CHAR(10))");
   或是String CreateTable_table1="CREATE TABLE table1"+"(no CHAR(10),name CHAR(10))";
       stmt.executeUpadate(CreateTable_table1);
两种特殊的SQL命令执行方式
1、使用PreparedStatement
如果某个SQL语句必须重复执行建议使用PreparedStatement,PreparedStatement代表"预先编译的SQL语句"。
执行基本SELECT语句
  PreparedStatement prepStmt = conn.prepareStatement("SELECT * FROM emp");
  ResultSet  rset=prepStmt.executeQuery();
利用WHERE来限制SELECT语句的查询结果
  PreparedStatement prepStmt=conn.prepareStatement("SELECT * FROM emp WHERE ename=? ")
  prepStmt.setString(1,"SCOTT");  //setString设置要传入的参数值,表示第一个参数是SCOTT
  ResultSet rset = prepStmt.executeQuery();
执行UPDATE语句
  PreparedStatement prepStmt=conn.prepareStatement("UPDATE emp SET sal = ? WHERE ename = ? ");
  prepStmt.setInt(1,100000);
  prepStmt.setString(2,"Rich");
  prepStmt.executeUpdate();
2、使用CallableStatement用来调用Oracle9i数据库的"预存程序"(Stored procedure)
语法: CallableStatement 变量名=conn.prepareCall(call 预存程序名称);
如   CallableStatement callStmt=conn.prepareCall("{call update_salary(?,?)}");
     callStmt.setInt(1,7788);
     callStmt.setInt(2,10000);
     callStmt.execute();

(4)处理结果集
如以while循环打印出ResultSet对象内所有记录
while(rs.next()){
  System.out.println(rs.getInt(1));  //1、2表示各字段相对位置
  System.out.println(rs.getString(2));
 }

(5)关闭数据库连接,最后一个操作是关闭Connection、Statement、ResultSet等对象
try{
  rs.close();
  stmt.close();
  con.close();
} catch(SQLException e){
  e.printStackTrace();
 }

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有