JNDI和JDBC的區別

一、JNDI和JDBC簡介

JNDI(Java Naming and Directory Interface)是用於在運行時查找和訪問命名和目錄服務的API,它允許在不了解底層實現的情況下,通過名稱找到並訪問Java對象。JDBC(Java Database Connectivity)是Java語言中用於執行SQL語句的API,它為程序員提供了一種連接數據庫的標準方法。

二、JNDI和JDBC的區別

1. 實現方式不同

JNDI是通過命名和目錄服務來尋找Java對象,而JDBC是通過驅動程序來實現對關係型數據庫進行訪問。

2. JNDI支持的協議和服務更多

JNDI可以支持許多不同的命名服務協議和目錄服務協議,例如LDAP(Lightweight Directory Access Protocol)、DNS(Domain Name System)和NIS(Network Information System)等,而JDBC只能用於訪問關係型數據庫。

3. JNDI查找和緩存方式不同

JNDI將查找結果緩存在客戶端,以提高效率,並且可以使用JNDI API來指定緩存存儲位置以及緩存策略,而JDBC不會緩存查詢結果。

4. JNDI應用場景更為廣泛

由於JNDI可以用於查找和訪問任何類型的Java對象,因此可以廣泛應用於各種分布式應用程序和組件中。而JDBC則主要用於連接和操作關係型數據庫。

三、JNDI和JDBC使用示例

1. JNDI示例

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.util.Hashtable;

public class JndiExample {
    public static void main(String[] args) throws NamingException {
        // 1. 創建InitialContext對象
        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory");
        env.put(Context.PROVIDER_URL, "http://localhost:8080");
        Context jndiContext = new InitialContext(env);
        
        // 2. 通過JNDI查找對象
        MyService service = (MyService) jndiContext.lookup("java:comp/env/service/MyService");
        System.out.println(service.execute());
    }
}

2. JDBC示例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcExample {
    public static void main(String[] args) throws SQLException {
        // 1. 加載數據庫驅動
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        
        // 2. 建立數據庫連接
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");
        
        // 3. 創建Statement對象執行SQL語句
        Statement statement = connection.createStatement();
        String sql = "select * from employees where salary > 5000";
        statement.execute(sql);
        
        // 4. 關閉連接
        statement.close();
        connection.close();
    }
}

原創文章,作者:TGLA,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/136104.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
TGLA的頭像TGLA
上一篇 2024-10-04 00:15
下一篇 2024-10-04 00:15

相關推薦

  • Python中new和init的區別

    new和init都是Python中常用的魔法方法,它們分別負責對象的創建和初始化,本文將從多個角度詳細闡述它們的區別。 一、創建對象 new方法是用來創建一個對象的,它是一個類級別…

    編程 2025-04-29
  • Sublime Test與Python的區別

    Sublime Text是一款流行的文本編輯器,而Python是一種廣泛使用的編程語言。雖然Sublime Text可以用於編寫Python代碼,但它們之間有很多不同之處。接下來從…

    編程 2025-04-29
  • Shell腳本與Python腳本的區別

    本文將從多個方面對Shell腳本與Python腳本的區別做詳細的闡述。 一、語法差異 Shell腳本和Python腳本的語法存在明顯差異。 Shell腳本是一種基於字符命令行的語言…

    編程 2025-04-29
  • Python中while語句和for語句的區別

    while語句和for語句是Python中兩種常見的循環語句,它們都可以用於重複執行一段代碼。然而,它們的語法和適用場景有所不同。本文將從多個方面詳細闡述Python中while語…

    編程 2025-04-29
  • Web程序和桌面程序的區別

    Web程序和桌面程序都是進行軟件開發的方式,但是它們之間存在很大的區別。本文將從多角度進行闡述。 一、運行方式 Web程序運行於互聯網上,用戶可以通過使用瀏覽器來訪問它。而桌面程序…

    編程 2025-04-29
  • TensorFlow和Python的區別

    TensorFlow和Python是現如今最受歡迎的機器學習平台和編程語言。雖然兩者都處於機器學習領域的主流陣營,但它們有很多區別。本文將從多個方面對TensorFlow和Pyth…

    編程 2025-04-28
  • 麥語言與Python的區別

    麥語言和Python都是非常受歡迎的編程語言。它們各自有自己的優缺點和適合的應用場景。本文將從語言特性、語法、生態系統等多個方面,對麥語言和Python進行詳細比較和闡述。 一、語…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • Python與C語言的區別和聯繫

    Python與C語言是兩種常用的編程語言,雖然兩者都可以用於編寫軟件程序,但是它們之間有很多不同之處。本文將從多個方面對Python與C語言的區別和聯繫進行詳細的闡述。 一、語法特…

    編程 2025-04-28
  • Python中深拷貝和淺拷貝的區別

    本文將從以下幾個方面對Python中深拷貝和淺拷貝的區別做詳細的闡述,包括:拷貝的含義、變量和對象的區別、淺拷貝的示例、深拷貝的示例、可變對象和不可變對象的區別、嵌套的數據結構以及…

    編程 2025-04-28

發表回復

登錄後才能評論