一文搞懂JDBC和JNDIJDBC(Java Database Connectivity)定义:JDBC是一个标准的Java API,由一组类和接口组成,Java应用程序开发人员使用它来访问数据库和执行SQL语句。JDBC是由数据库中间服务商提供的,用于连接数据库的Java API。
核心特点:
- 通过Java程序找数据库驱动:JDBC最大的特点是通过Java程序主动去寻找数据库驱动,然后来连接数据库。
- 直接连接数据库:Java程序直接通过JDBC API与数据库进行交互,包括注册驱动、建立连接、执行SQL语句、处理结果集以及关闭资源等步骤。
使用步骤:
- 注册驱动:通常只需要注册一次,通过Class.forName("com.mysql.jdbc.Driver")实现(注意:在新版本的JDBC中,这一步可能已经被省略,因为JDBC 4.0及以上版本支持自动发现驱动)。
- 建立连接:通过DriverManager.getConnection(url, name, psw)方法建立与数据库的连接,其中url是数据库的URL,name是用户名,psw是密码。
- 创建Statement:通过连接对象创建一个Statement对象,用于执行SQL语句。建议使用PreparedStatement来执行动态SQL语句,以提高性能和安全性。
- 执行语句并处理结果:通过Statement或PreparedStatement对象执行SQL语句,并获取结果集(ResultSet),然后遍历结果集处理数据。
- 关闭资源:最后,关闭ResultSet、Statement和Connection对象,以释放数据库资源。
JNDI(Java Name Directory Interface)定义:JNDI是Java命名和目录接口,它不仅仅用于数据库定位,而是给当前应用服务器所管理的所有资源一个唯一的标识,包括数据库、网页、文件、连接池等。JNDI提供了一种统一的方式,可以在网络上查找和访问服务。
核心特点:
- 统一资源访问:JNDI通过命名服务来找到资源(如数据库)并返回资源连接,而不需要在代码中硬编码资源的位置和配置信息。
- 配置灵活性:JNDI的配置信息通常放在应用服务器的配置文件中(如Tomcat的context.xml),当资源信息发生变化时,只需要修改配置文件,而不需要修改代码。
- 连接池管理:JNDI通常与连接池一起使用,以提高数据库连接的效率和性能。
使用步骤:
- 添加jar包:确保项目中包含了JNDI和数据库连接池所需的jar包。
- 配置应用服务器:在应用服务器的配置文件中(如Tomcat的context.xml)配置资源信息,包括资源名称、类型、最大活跃连接数、最大空闲连接数、最大等待时间、用户名、密码、驱动类名以及数据库URL等。
- 配置web.xml:在项目的web.xml文件中添加资源引用配置,指定资源的名称和类型等信息。
- 在代码中查找资源:通过JNDI API在代码中查找资源,获取DataSource对象,然后通过DataSource对象获取数据库连接。
JDBC与JNDI的比较:
配置灵活性:
JDBC:数据库连接信息硬编码在代码中,当数据库信息发生变化时,需要修改代码。
JNDI:数据库连接信息配置在应用服务器的配置文件中,当数据库信息发生变化时,只需要修改配置文件,而不需要修改代码。
请求资源的主动性:
JDBC:Java程序主动通过JDBC API去连接数据库。
JNDI:Java程序通过请求命名服务器(如应用服务器)来获取数据库连接。
功能范围:
JDBC:只能用于连接数据库和执行SQL语句。
JNDI:除了能连接数据库外,还能管理当前应用服务器上的其他资源,如网页、文件等。
连接性能:
JDBC:通常不使用连接池,每次请求都会建立一个新的数据库连接,性能较低。
JNDI:通常与连接池一起使用,可以重用数据库连接,提高性能。
综上所述,JDBC和JNDI各有优缺点,选择哪种方式取决于具体的应用场景和需求。对于简单的应用或临时性的数据库连接需求,JDBC可能是一个更直接和简单的选择。而对于复杂的应用或需要高效管理数据库连接和其他资源的情况,JNDI则提供了更灵活和高效的解决方案。