归结来说有JDBC、ODBC-JDBC桥接 两种方法:
一、JDBC连接 Oracle的步骤
(1)装载并注册数据库的JDBC驱动程序
载入JDBC驱动:
Class.forName("oracle.jdbc.driver.OracleDriver");
注册JDBC驱动:
java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
(2)建立与数据库的连接
要建立与数据库的连接,首先要创建指定数据库的URL。连接数据库的URL对象,利用DriverManager 的getConnection方法建立的。数据库URL对象与网络资源的统一资源定位类似,其构成格式如下:
jdbc:subProtocol:subName://hostname:port;DatabaseName=ⅹⅹⅹ
其中:
jdbc表示当前通过Java的数据库连接进行数据库访问;
subProtocol表示通过某种驱动程序支持的数据库连接机制;
subName表示在当前连接机制下的具体名称;
hostname表示主机名;
port表示相应的连接端口;
DatabaseName表示要连接的数据库的名称。
这里以与Oracle数据库的连接为例:
连接Oracle 8/8i/9i数据库(用thin模式)
url = jdbc:oracle:thin:@hostip:1521:oracleSID;
注意:hostip指主机的ip地址,oracleSID指数据库的SID。
再者确定连接数据库的用户名与密码,即user和password 的值:
user = “ⅹⅹⅹ “;
password = “ⅹⅹⅹ“;
最后使用如下语句:
Connection con=java.sql.DriverManager.getConnection(url,user,password);
(3)创建Statement对象
例如:
Statement stmt = con.createStatement();
(4)调用并执行SQL语句
例如:
String sql = “select a,b,c from table1";//table1为你所要查询的表名,a,b,c为所要查询的字段
ResultSet rs = stmt.executeQuery(sql);
(5)访问ResultSet中的记录集并从中取出记录
例如:
rs.next( );
rs.absolute(4);
String col1=rs.getString(1);
……..
(6)依次关闭ResultSet、Statement和Connection对象
例如:
rs.close();
stmt.close();
con.close();
?
二、ODBC-JDBC桥接
1、工作原理:
? ? ?JDBC- ODBC (Open Database Connectivity,ODBC) 桥驱动程序由Sun 与Merant公司联合开发, 主要功能是把JDBC API调用转换成ODBC API 调用, 然后ODBC API调用针对供应商的ODBC 驱动程序来访问数据库, 即利用JDBC- ODBC 桥通过ODBC来存储数据源。如下图:JDBC-ODBC应用模式
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图1.1JDBC-ODBC应用模式
? ? ? ? ?JDBC- ODBC 桥是一个JDBC 驱动程序, 对ODBC 而言, 它像是通用的应用程序, 桥为所有适用于ODBC 的数据库实现JDBC。它作为sun.jdbc.odbc 包实现, 其中包含一个用来访问ODBC 的本地库。由于ODBC 被广泛地使用, 所以桥的优点是让JDBC 能够访问几乎所有的数据库。桥支持ODBC 2.x, 这是当前大多数据ODBC 驱动程序支持的版本。桥驱动程序为Java 应用程序提供了一种把JDBC 调用映射为ODBC 调用的方法。因此,需要在客户端机器上安装ODBC 驱动。JDBC-ODBC 桥在JDBCAPI 和ODBCAPI之间提供了一个桥梁,这个桥把标准的JDBC 调用翻译成对应的ODBC 调用,然后通过ODBC 库把它们发送到ODBC 数据源。
2、JDBC-ODBC所用的配置
? ? 桥作为包sun.jdbc.odbc 与JDK 一起自动安装, 无需特殊配置。Java 2 SDK 类库中包含了用于JDBC-ODBC桥接驱动程序的类, 因此不再需要安装任何附加包就可以使用。但是客户机需要通过生成数据源名(Data Source Names , DSN)来配置ODBC 管理器。DSN 是一个把数据库、驱动程序、一些可选的设置连接起来的命名配置。具体配置方法如下( 在Windows XP 环境下) :
? ? ? ? ?( 1) 控制面板中, 管理工具→数据源(ODBC)->系统DSN;(如图2.1)
?
?
?
?图2.1
? ? ? ? ?( 2) 在ODBC 数据源管理器中的“系统DSN”中添加系统数据源(如果没有找到该数据源的驱动程序则需要下载安装)。要注意, 一定要用系统(DSN)数据源, 不能用用户(DSN)数据源, 因为servlet 是伪系统(DSN), 所有的jsp 、servlet程序, 需要连接jdbc- odbc 驱动的话, 都只能用系统( DSN) 数据源, 不能用用户( DSN) 数据源。
3、各数据库的不同配置(图解)
? ? 3.1 Access
? ? ? ? ? ?(1)添加->Driver do Microsoft Access(*.mdb)->完成
? ? ? ? ? ?(2)输入数据源名称yiliangdian_access? ?
? ?(3)在数据库标签中-->选择,在列表中选择需要连接的数据库student.
?
? ? ?
(4)单击高级可设置登陆名称yiliangdian与密码123456。这三项必须与程序中DriverManager.getConnection("jdbc:odbc:yiliangdian_access","yiliangdian","123456")一致。
? ? ? 3.2 mysql
? ? ? ? ? ? (1) 如access中的(1)。
? ? ? ? ? ? (2)选择mysql数据源驱动,如果没有则需要下载安装。->完成
?
? ? ? ? ?(3)输入数据源名称yiliangdian_mysql,Server:localhost(如果连接其它主机,输入IP),User:root,Password:123456,Databasse:student. ->OK
?
4、应用
/**
* filename: joaccess.java
* fuction: 实现jdbc-odbc桥连接方式方式
* writtenby yiliangdian @ 2008-4-18
**/
import java.sql.*;
public class joaccess {
? ?public static void main(String[] args) {
? ? ? //建立和数据库的连接时要用好Connection接口
? ? ? ?Connection con;
? ? ? //提供在基层连接上运行SQL语句
? ? ? Statement sql;
? ? ? //在Statement执行了SQL语句以后,结果值是以结果集的方式返回的。
? ? ? ResultSet rs;
? ? ? try {
? ? ? ? ? //jdbc-odbc桥连接方式需要加载jdbc-odbc方式的驱动程序
? ? ? ? ? ?Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
? ? ?}catch(ClassNotFoundException e){
? ? ? ? ? System.out.println(""+e);
? ? ?}
? ? ?try{
? ? ? ? ? ?//DriverManager类是JDBC的管理层,作用于用户和驱动之间。DriverManager类跟踪可用的驱动
? ? ? ? ? ? //程序,并在数据库和相应驱动程序之间建立连接。chenyuaccess是建立的数据源名称,后两项是
? ? ? ? ? ? ?//用户名,密码是建立数据源时设立的与数据库中的密码无关,该用户名密码可以为空。
? ? ? ? ? ? ?//不同的数据库连接只需要改变源名称,用户名和密码
? ? ? ? ? con = DriverManager.getConnection("jdbc:odbc:yiliangdian_access","yiliangdian","123456");
? ? ? ? ? ? //创建Statement,获取Statement实例,用于执行SQL语句
? ? ? ? ? sql = con.createStatement();
? ? ? ? ? ? //运行查询语句,返回ResultSet对象
? ? ? ? ? rs = sql.executeQuery("select * from chengjibiao");
? ? ? ? ? ? while(rs.next()){
? ? ? ? ? ? ? ? ? ? String number = rs.getString(1);
? ? ? ? ? ? ? ? ? ?String name = rs.getString(2);
? ? ? ? ? ? ? ? ? ?Date date = rs.getDate(3);
? ? ? ? ? ? ? ? ? ?int math = rs.getInt(4);
? ? ? ? ? ? ? ? ? ? ?System.out.println("学号:" + number);
? ? ? ? ? ? ? ? ? ?System.out.println("姓名:" + name);
? ? ? ? ? ? ? ? ? ?System.out.println("生日:" + date);
? ? ? ? ? ? ? ? ? ?System.out.println("数学:" + math);
? ? ? ? ? ? ? }
? ? ? ? ? con.close();
? ? ?}catch(SQLException e1)
? ? ?{
? ? ? ? ? ? ? ? System.out.println("sql语句出错:"+e1);
? ? ? ?}
}
}
?
参考:http://tayueerlai01.bokee.com/500929271.html