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);
  }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM