目录

本文目标

JNDI与JDBC的区别:

区别

JNDI配置步骤:

   1.配置服务器(tomcat)的conf/context.xml文件

c3p0数据库连接

 druid数据库连接

     2.添加JAR包到tomcat安装目录下的lib文件夹下

     3.配置web.xml文件

java测试代码:


本文目标

在 Tomcat/TomEE 环境,编写一个 Servlet 程序,通过 JNDI 获 取 JDBC DataSource,能够获取到正常的 java.sql.Connection 对象。

JNDI与JDBC的区别:

JDBC(Java Database Connectivity):是由数据库中间服务商提供的,用于连接数据库的Java API。一组类和接口(对接数据库)。

JNDI(Java Name Directory Interface):是为应用服务器(Tomcat)管理资源所设置的目录样式的唯一标识。(数据库、网页、文档等)

区别

1.JNDI通过在Tomcat服务器的配置文件和项目的web.xml上配置参数,可以灵活、快速地获取数据库配置信息并连接。对比JDBC,当数据库参数、路径等改变时也不需要改变代码,比较灵活简单

2.请求资源的主动性不一样。JDBC是通过java程序主动去连接数据库获得连接,而JNDI是通过请求命名服务器返回数据库连接。

3.功能范围不一样。JDBC只能用来做一件事那就是连接数据库,而命名JNDI除了能和JDBC做同样的事以外还能管理当前应用服务器上的其他资源,如网页,文件等

4.请求连接数不通。JNDI连接池数高于JDBC。

JNDI配置步骤:

   1.配置服务器(tomcat)的conf/context.xml文件

     添加如下节点:

<Resource
            name="jdbc/books" 数据源名称
            auth="Container" 数据源由服务器创建
            type="javax.sql.DataSource"
            maxActive="100"
            maxIdle="30"
            maxWait="10000"
            username="test"
            password="123456"
            dirverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
            url="jdbc:sqlserver://localhost:1433;databasename=数据库名字"
    />


 


还可以配置连接池(如:c3p0,druid,dpcp)

  • 更多请参考:

c3p0数据库连接

<Resource acquireIncrement="3" auth="Container" driverClass="com.mysql.jdbc.Driver"
		factory="org.apache.naming.factory.BeanFactory"
		idleConnectionTestPeriod="60" initialPoolSize="5"
		jdbcUrl="jdbc:mysql://rm-bp1333wl9890cb64yo.mysql.rds.aliyuncs.com:3306/cloudpay"
		maxIdleTime="1800" maxPoolSize="20" minPoolSize="5" name="jdbc/cloudpay"
		password="Uienew7812yu" type="com.mchange.v2.c3p0.ComboPooledDataSource"
		user="newolpay" />

 

 druid数据库连接

<Resource factory="com.alibaba.druid.pool.DruidDataSourceFactory" filters="stat,config" 
		initialSize="1" maxActive="5" maxOpenPreparedStatements="100" maxWait="60000" 
		minEvictableIdleTimeMillis="300000" minIdle="1" name="jdbc/fico" password="NUFui12387" 
		poolPreparedStatements="true" testOnBorrow="false" testWhileIdle="true" timeBetweenEvictionRunsMillis="30000" 
		type="com.alibaba.druid.pool.DruidDataSource" url="jdbc:mysql://rm-bp1l2smvt7d6iqm05o.mysql.rds.aliyuncs.com:3306/newolpay?useSSL=false" 
		useGloalDataSourceStat="true" username="newolpay" validationQuery="SELECT 
		1 FROM DUAL" />

 

     2.添加JAR包到tomcat安装目录下的lib文件夹下

 

     3.配置web.xml文件

<!-- 读取数据库配置  -->
	<resource-ref>
	<!--  这个值是要和conf/context.xml文件中name属性值相同 -->
		<res-ref-name>jdbc/cloudpay</res-ref-name>
		<res-type>javax.sql.DataSource</res-type>
		<res-auth>Container</res-auth>
	</resource-ref>

通过以上几步的配置基本完成。

java测试代码:


try {
        Context ctx = new InitialContext();
//此处要添加的是查找数据源的名字 但是要加前缀java:comp/env
        DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/books");
        Connection conn = ds.getConnection(); //通过数据源获得数据源中的连接
        String sql = "select * from person";
        PreparedStatement pstmt = conn.prepareStatement(sql);
        ResultSet rs = pstmt.executeQuery();
        while(rs.next()){
            System.out.println(rs.getString(1));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

 


注意:以上测试代码需要写在servlet中,因为数据源对象是在服务器(tomcat)中加载创建的,所以启动tomcat后会自动创建dataSource对象