JNDI和JDBC的区别和联系及其使用方法

一.JNDI 和JDBC的区别和联系
两者都是API,是连接数据库的标准。并不是什么产品或方法。

 

二.JDBC

全称:Java Database Connectivity

以一种统一的方式来对各种各样的数据库进行存取
使用JDBC带来的问题:
(1).数据库服务器名称 、用户名和口令都可能需要改变,由此引发JDBC URL需要修改
(2).数据库可能改用别的产品,如改用DB2或者Oracle,引发JDBC驱动程序包和类名需要修改
(3).随着实际使用终端的增加,原配置的连接池参数可能需要调整

 

使用方法:

(1)加载数据库驱动,填写数据库url,用户名,密码

 

(2)在程序中进行调用

 

三.JNDI

Java Naming and Directory Interface

它提供了一致的模型来存取和操作企业级的资源如DNS和LDAP

JNDI相对与JDBC来说是他的灵活性,程序员不需要关心“具体的数据库后台是什么?JDBC驱动程序是什么?JDBC URL格式是什么?访问数据库的用户名和口令是什么?”等等这些问题,程序员编写的程序应该没有对 JDBC 驱动程序的引用,没有服务器名称,没有用户名称或口令 —— 甚至没有数据库池或连接管理。而是把这些问题交给J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。 

 

使用方法:

tomcat下jndi的两种配置方式

(一).非全局的JNDI配置:只针对某一个Web项目的数据源的配置

1.导入要链接数据库的jar包文件

例如:

sqlserver导入:sqljdbc4.jar包

oracle导入:ojdbc14.jar包

mySQL导入:mysql-connector-java-5.0.8.jar包

 

2.在JNDI中配置数据库的连接池

在WEB项目中的META-INF中创建一个context.xml文件。用于设置数据库的连接池信息

例如(mysql):

复制代码

  <?xml version="1.0" encoding="UTF-8"?>  
  <Context>
  <!-- 
  JNDI数据源配置
  J2EE服务器上保存着一个数据库的多个连接(连接池中),
  数据源被绑定在了JNDI树上,
  每一个DataSource都有一个name,
  客户端通过name找到在JNDI树上绑定的DataSource,
  再由DataSource找到一个连接
 |- name:表示以后要查找的名称。通过此名称可以找到DataSource,此名称任意更换,但是程序中最终要查找的就是此名称,  
 |- auth:由容器进行授权及管理,指的用户名和密码是否可以在容器上生效,可以使用Container  
 |- type:此名称所代表的类型,现在为javax.sql.DataSource(不用变)  
 |- maxActive:表示一个数据库在此服务器上所能打开的最大连接数  
 |- maxIdle:表示一个数据库在此服务器上维持的最小连接数  
 |- maxWait:最大等待时间。10000毫秒  
 |- username:数据库连接的用户名  
 |- password:数据库连接的密码  
 |- driverClassName:数据库连接的驱动程序  
 |- url:数据库连接的地址  
 -->
 <Resource  
     name="jdbc/mysql"  
     auth="Container"   
     type="javax.sql.DataSource"  
     maxActive="100"   
     maxIdle="30"   
     maxWait="10000"  
     username="root"   
     password="whr110112119"  
     driverClassName="com.mysql.jdbc.Driver"  
     url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&amp;characterEncoding=utf-8"/>
 </Context>

复制代码

 

3.在web.xml文件中进行配置(可配置也可以不配置)

如果要配置的话:

复制代码

    <resource-ref>  
        <description>my DB Connection</description>  
        <res-ref-name><span style="font-family: Arial, Helvetica, sans-serif;">jdbc/sqlserver</span><span style="font-family: Arial, Helvetica, sans-serif;"></res-ref-name>这个名字要与context.xml中的name一样</span>  
        <res-type>javax.sql.DataSource</res-type>  
        <res-auth>Container</res-auth>  
    </resource-ref>

复制代码

其中res-ref-name值要和context.xml的name值一致

 

4.如果使用Spring的情况下

在applicationContext.xml或者自己的Spring的配置文件中导入JNDI的配置信息

复制代码

 //获得content.xml中JNDI配置的数据库的连接池信息。jndi-name必须与JNDI中的name值一样
 <jee:jndi-lookup id="dataSource"  jndi-name="jdbc/mysql" />
 //使用JdbcTemplate操作数据库。
 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
         <property name="dataSource" ref="dataSource" />
 </bean>

复制代码

在java文件中使用IOC得到jdbcTemplate对象。最后使用jdbcTemplate操作数据库

jndi测试方法:

复制代码

    public void testJNDI() throws NamingException, SQLException{  
        Context ctx = new InitialContext();  
        DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql ");  
        Connection conn = ds.getConnection();  
        System.out.println(conn.isClosed());       
    }

复制代码

在jsp中调用加载jndi方式(不可以直接用main方法测试,必须通过启动容器从jsp中调用):

写测试的jsp,例如:jndiTest.jsp

复制代码

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>   
    <%@page import="com.apply.test.JNDITest"%>   
    <%   
        // 调用JNDITest类的testJNDI方法进行测试  
        JNDITest test = new JNDITest();  
        test.testJNDI();  
        out.println("connection pool connected !!");     
    %>   
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    <html>  
      <head>  
        <title>jndi配置测试</title>  
      </head>  
      <body>  
      </body>  
    </html>

复制代码

 

5.如果不使用Spring的话,可以在java文件中直接使用:

复制代码

   //JNDI方式
   Context ctx = new InitialContext();  
   //获取数据源
   DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql");
   //通过数据源取连接池中的连接
   conn = ds.getConnection(); 

复制代码

 

(二)全局的JNDI配置

1.在tomcat的安装目录下的conf下的server.xml文件中的GlobalNamingResources标签下加入resource配置信息(局部JNDI在context.xml文件中的resource配置信息)

 

2.在Web项目中的META-INF下的context中配置

 //global中的名字要与server.xml中的名称一样,而这里的name表示当前要使用名称
 <ResourceLink name="jdbc/mysql" global="jdbc/mysql" type="javax.sql.DataSource"/>

 

3.剩下的和配置局部JNDI一样,及第3,第4,第5配置完直接使用就可以了

 

总结:

如果要配置局部的话,推荐使用第一种方式,这样不依赖tomcat了

但是还是推荐使用第二种方式好,虽然依赖tomat,但是是全局的,而且可以配置多个,对于以后切换使用方便

在项目的web.xml中添加的资源引用可有可无

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值