JNDI连接池连接Oracle数据库

今天做了一个评论的小功能,要求用JNDI连接池连接Oracle数据库,以前只是测试了是否连接的上,现在没想到一个JNDI连接池连接Oracle数据库,纠结了好久,原来都是Oracle数据库的问题,这是过失。下面介绍一下JNDI连接池连接Oracle数据库。

JNDI介绍
什么是JNDI?
JNDI(Java Naming and Directory Interface,Java命名和目录接口)
是一组在Java应用中访问命名和目录服务的API
通过名称将资源与服务进行关联
 
什么是连接池技术?
 
连接池
连接池是在内存中预设好一定数量的连接对象,以备用户在进行数据库操作时直接使用
性能
数据库连接的建立、断开均由管理池统一管理
连接池技术与传统数据库连接的比较
数据库操作性能得到提升
通过连接池管理数据库的连接与释放、提高了系统资源的使用效率
 
为什么使用连接池?
Ø传统数据库连接方式的不足
Ø每一次请求时均需要与数据库进行连接,资源占用较多
Ø当并发访问数量较大时,网站速度收到极大影响
Ø在访问结束后必须要关闭连接释放资源
Ø系统的安全性和稳定性相对较差
 
企业级开发需要稳健和高效的数据访问层
完成对数据库的CRUD操作
能够处理数据库发生的各种错误
可以灵活的修改配置
提供方便使用的工具
高性能
 
访问数据源
第一步:Tomcat的conf/context.xml中的配置
 加入数据库驱动文件
把数据库驱动的.jar文件,加入到Tomcat的commonlib中
应用程序的web.xml文件的配置
在web.xml中配置<resource-ref>
<?xml version='1.0' encoding='utf-8'?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context>

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->

--红色字体是需要根据数据库名配置
<Resource name="jdbc/liuyan" auth="Container"
type="javax.sql.DataSource" maxActive="100"
maxIdle="30" maxWait="10000" username="epet" password="123456"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:orcl"
/>
</Context>
import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

/** 
 * 文件名:JNDI.java
 * 描    述:这是一个数据库连接类
 * 作    者:WLX
 * 所属项目:MyNews
 * JDK版本:JDK1.7 
 * 创建时间:2015年5月23日 下午2:54:24
 *
*/
public class JNDI {

    public Connection getconn() {
        
        Connection conn = null;
        try {
            
            Context ctx;
            ctx = new InitialContext();
            //java:comp/env/为前缀
            DataSource source = (DataSource)ctx.lookup("java:comp/env/jdbc/liuyan");
        
            Connection connection = source.getConnection();
            if(connection != null){
                conn = connection;
            }
            
        } catch (NamingException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

}
 
 
原文地址:https://www.cnblogs.com/wlx520/p/4524861.html