本刊择优刊登计算机技术、网络与通信技术、信息化建设、信息管理、工程评估、项目咨询与管理、电子商务等方面的论文
  当前位置:网络技术应用  

JDBC-ODBC桥技术的应用与实践

           2007-4-13     冯家琪,金 翔
          

(沈阳师范大学科信软件学院) 

  摘要:在大多数复杂的Web应用软件中,都要求具有数据持久性。关系型数据库引擎是保存数据的一种常见的选择。在基于Java的Web应用中,JDBC(Java Database Connectivity)API为开发人员提供了一种在JAVA程序中连接关系型数据的能力。然而并不是所有的关系型数据库都提供JDBC驱动程序,所以这时候我们就需要用JDBC-ODBC桥作为数据库驱动程序,来实现数据持久性的要求。
  关键词:JDBC-ODBC桥;Web应用;数据库访问

 


   1 JDBC-ODBC桥的工作原理
  JDBC-ODBC(Open Database Connectivity,ODBC)桥驱动程序由Sun与Merant公司联合开发,主要功能是把JDBC API调用转换成ODBC API调用,然后ODBC API调用针对供应商的ODBC驱动程序来访问数据库,即利用JDBC-ODBC桥通过ODBC来存取数据源,其应用模式如图1所示。

图1 JDBC-ODBC桥应用模式
  从图1可以看出,JDBC-ODBC桥是一个JDBC驱动程序,对ODBC而言,它像是通用的应用程序,桥为所有适用于ODBC的数据库实现JDBC。它作为sun.jdbc.odbc包实现,其中包含一个用来访问ODBC的本地库。由于ODBC被广泛地使用,所以桥的优点是让JDBC能够访问几乎所有的数据库。桥支持ODBC 2.x,这是当前大多数据ODBC驱动程序支持的版本。桥作为包sun.jdbc.odbc与JDK一起自动安装,无需特殊配置。

  2 JDBC-ODBC桥所用DNS的配置
  Java 2 SDK类库中包含了用于JDBC-ODBC桥接驱动程序的类,因此不再需要安装任何附加包就可以使用。但是客户机需要通过生成数据源名(Data Source Names,DSN)来配置ODBC管理器。DSN是一个把数据库、驱动程序、一些可选的设置连接起来的命名配置。具体配置方法如下(在Windows XP环境下):
  (1)在Windows-〉Start-〉控制面板中,打开性与维护-〉管理工具-〉数据源(ODBC);
  (2)在ODBC数据源管理器中的“系统DSN”中添加系统数据源),要注意,一定要用系统(DSN)数据源,不能用用户(DSN)数据源,因为servlet是伪系统(DSN),所有的jsp、servlet程序,需要连接jdbc-odbc驱动的话,都只能用系统(DSN)数据源,不能用用户(DSN)数据源。

  3 加载JDBC-ODBC桥驱动程序
  应用程序使用JDBC-ODBC桥连接数据库之前,必须将桥驱动程序类sun.jdbc.odbc.JdbcOdbcDriver添加到名为jdbc.drivers的java.lang.System属性中,或用Java类加载器将其显式地加载。可以用以下方式进行桥的显式加载: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 加载时,ODBC驱动程序(与所有JDBC驱动程序一样)将创建它自己的实例,同时在JDBC驱动程序管理器进行注册。

  4 通过JDBC-ODBC桥建立连接
  与数据库建立连接的标准方法是调用DriverManager的方法,即DriverManager.getConnection方法。该方法接受含有某个URL的字符串。DriverManager类(即所谓的JDBC管理层)将尝试找到可与那个URL所代表的数据库进行连接的驱动程序。DriverManager类存有已注册的Driver类的清单。当调用方法getConnection时,它将检查清单中的每个驱动程序,直到找到可与URL中指定的数据库进行连接的驱动程序为止。

  5 JDBC-ODBC桥的应用实例
  连接一旦建立,就可用来向它所涉及的数据库传送SQL语句。JDBC对可被发送的SQL语句类型不加任何限制。这就提供了很大的灵活性,即允许使用特定的数据库语句或甚至于非SQL语句。然而,它要求用户自己负责确保所涉及的数据库可以处理所发送的SQL语句,否则将自食其果。事例如下:
import java.sql.*;
public class JDBCTest
{
  public static void main (String args[])
  {
  Connection conn;
  Statement stmt;
  ResultSet recset;
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  conn = DriverManager.getConnection("jdbc:odbc:jdbctest","test","test");
  stmt = conn.createStatement();
  String query = "insert into user values ('002','albert')";
  stmt.execute(query);
  stmt.close();
  conn.close();
  }
}



 

[1] [2] [下一页]

 
中国刊例网
中国学术期刊光盘版
       

版权所有《网络与信息》杂志社 建议用 800*600分辨率 浏览
COPYRIGHT© 2002-2005 www.51de.com

辽ICP备05005462号