千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > JNDI和JDBC的区别

JNDI和JDBC的区别

来源:千锋教育
发布人:xqq
时间: 2023-11-22 01:33:07 1700587987

一、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();
    }
}

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT