JDBC和ODBC的区别
一.JDBC(Java DataBase Connectivity standard)
1.JDBC,它是一个面向对象的应用程序接口(API), 通过它可访问各类关系数据库。
2. 驱动程序(JDBC driver)
要通过JDBC来存取某一特定的数据库,必须有相应的JDBC driver,它往往是由生产数据库的厂家提供,是连接JDBC API与具体数据库之间的桥梁。
3.DBMS
4.三者之间的联系
JDBC API调用驱动程序来访问DBMS
二.ODBC(Open Database Connectivity,开放数据库互连)
ODBC是微软公司建立的一组规范,提供了一组对数据库访问的标准API。
1. ODBC管理器(Administrator)
该程序主要任务是管理安装的ODBC驱动程序和管理数据源。
2. 驱动程序管理器(Driver Manager)
驱动程序管理器的任务是管理ODBC驱动程序,是ODBC中最重要的部件。
3. ODBC 驱动程序
是微软公司提供的,提供了ODBC和数据库之间的接口。
4. 数据源
数据源包含了数据库位置和数据库类型、驱动程序等信息,实际上是一种数据连接的抽象。
5. 各部件之间的关系
应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源建立起ODBC与具体数据库的联系。
在ODBC中,ODBC API不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。驱动程序管理器负责将应用程序对ODBC API的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。
三.JDBC连接DBMS的方式
1.JDBC连接DBMS
(1)导入包:
这需要你有软件包包含了数据库编程所需的JDBC类。大多数情况下,使用import java.sql.* 就足够了,如下所示:
//STEP 1. Import required packages
import java.sql.*;
(2)加载JDBC驱动程序:
这需要初始化驱动程序,这样就可以打开与数据库的通信信道。以下是代码片段实现这一目标:
//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
(3)建立连接:
这需要使用DriverManager.getConnection()方法来创建一个Connection对象,它代表一个物理连接的数据库,如下所示:
//STEP 3: Open a connection
// Database credentials
static final String USER = "username";
static final String PASS = "password";
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
(4)执行一个查询:
这需要使用一个对象类型Statement或PreparedStatement构建,并提交一个SQL语句到数据库。如下:
//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);
如果有一个SQL UPDATE,INSERT或DELETE语句,那么需要下面的代码片段:
//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "DELETE FROM Employees";
ResultSet rs = stmt.executeUpdate(sql);
(5)从结果集中提取数据:
这一步是必需的情况下,从数据库中获取数据。可以使用适当的ResultSet.getXXX()方法来检索的数据结果如下:
//STEP 5: Extract data from result set
while(rs.next()){
//Retrieve by column name
int id = rs.getInt("id");
int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last");
//Display values
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", First: " + first);
System.out.println(", Last: " + last);
}
(6)清理环境:
应该明确地关闭所有的数据库资源,对依赖于JVM的垃圾收集如下:
//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();
2.JDBC-ODBC桥连接
(1)建立数据源
(2)加载驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
(3)建立连接
Connection con = DriverManager.getConnection(url, "myLogin", "myPassword");、
JDBC URL 将以 jdbc:odbc 开始:余下 URL 通常是你的数据源名字或数据库系统。
(4)同JDBC方式的(4)(5)(6)相同。
四.JDBC和ODBC的区别
1. jdbc是java通过网络访问db的url连接的方式;odbc是本地建立连接后再使用的方式。
或者说:前者是数据库官方版本,后者是符合规范的通用版本。
2. 驱动不同:JDBC的驱动程序由数据库厂商提供,ODBC驱动程序由微软提供。
3. java中一般采用JDBC连接 或JDBC-ODBC桥连接;java不直接调用ODBC API的原因是 ODBC采用C语言编写, 在移植性、安全性方面有欠缺。
4. JDBC-ODBC桥连接 一般用于本地学习或者局域网内使用;而JDBC方式可实现跨平台移植,适用范围广。
5. JDBC-ODBC桥连接一般用在JDK 5 以前。由于在JDK 5 以前,服务器厂商没有提供JDBC驱动程序,只能采用ODBC桥连接。
五、Access数据库连接示例
连接Access数据库时应该只有JDBC-ODBC桥接方式,没有JDBC方式。
import java.sql.*;
public class dbconn {
static final String DBDriver ="sun.jdbc.odbc.JdbcOdbcDriver";
static final String strConn ="jdbc:odbc:driver={Microsoft Access
Driver (*.mdb)};DBQ=C:/apache-tomcat-6.0.45/webapps/site/DB/dataDB.mdb";
static final String DBusername="";
static final String DBpassword="";
Connection conn=null;
ResultSet rs=null;
public static String dbconn() {
String sErr = "";
try {
java.sql.DriverManager.registerDriver((java.sql.Driver)(Class.forName(DBDriver).newInstance()));
}catch (Exception e) {
sErr = e.toString();
}
return (sErr);
}
java.sql.Connection cn() throws SQLException {
return java.sql.DriverManager.getConnection(strConn , DBusername, DBpassword);
}
}