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