zoukankan      html  css  js  c++  java
  • 用JNDI连接数据库

    之前说到了利用Java中的Properties类读取properties配置文件,连接数据库,现在说另一种方法,他们的目的和作用都是一样的,都是为了提高代码的复用性,解决了更改数据库

    时还要更改代码的麻烦。和之前的properties解决的问题一样这里就不说了,详见前一篇文章: Java读取properties文件连接数据库

    jndi是什么?

    JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现。

    我们能做的就是拿来直接用

    这是Tomcat网站上给我们的提示,告诉我们怎么配置,还有一些模板:https://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html

    下面还是我的mail项目,在eclipse中用jndi连接数据库(获取数据库连接)执行操作

    在eclipse中建的web项目会有WebContent目录,MyEclipse中是WebRoot目录,其实都是一样的,在目录下有META-INF文件夹,在里面新建context.xml输入以下内容

    <?xml version="1.0" encoding="UTF-8"?> 
    <Context>
     <Resource name="jdbc/mail" 
      auth="Container" 
      type="javax.sql.DataSource"
      maxActive="100" 
      maxIdle="30" 
      maxWait="10000"
      username="root" 
      password="root" 
      driverClassName="com.mysql.jdbc.Driver"
      url="jdbc:mysql://localhost:3306/mail"/>
     <

    • driverClassName - 要使用的JDBC驱动程序的完全限定的Java类名称。
    • username - 要传递给我们的JDBC驱动程序的数据库用户名。
    • password - 要传递给我们的JDBC驱动程序的数据库密码。
    • url - 要传递给我们的JDBC驱动程序的连接URL。(为了向后兼容,该属性driverName 也被识别。)
    • initialSize - 池初始化期间将在池中创建的初始连接数。默认值:0
    • maxActive - 可以同时从此池分配的最大连接数。默认值:8
    • minIdle - 同时在此池中闲置的最小连接数。默认值:0
    • maxIdle - 可以同时在该池中闲置的最大连接数。默认值:8
    • maxWait - 抛出异常之前要返回的连接的池将等待的最大毫秒数(当没有可用连接时)。默认值:-1(无限)
    • name - 数据源名称,可以随便定义注意要和后面的web.xml文件中的一致
    • auth - 这个官方也没有给出……没找到
    接下来在WEB-INF中的web.xml文件中添加一些内容

    <resource-ref> 
            <description>DB Connection</description> 
            <res-ref-name>jdbc/mail</res-ref-name> 
            <res-type>javax.sql.DataSource</res-type> 
            <res-auth>Container</res-auth> 
        </resource-ref> 

    里面的res-ref-name中的属性值要和之前的context.xml中的name是一致的,还有auth属性也要一致,这样才能找到。


    直接把之前写的获取数据库连接的类改了

    package util;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.sql.DataSource;
    
    public class ConnectionManager {
    	public static Connection getConnection() {
    		Connection conn = null;
    		try {
    			// 初始化查找命名空间
    			Context ctx = new InitialContext();
    			// InitialContext ctx = new InitialContext();//也可以
    			// 找到DataSource,对名称进行定位java:comp/env是固定的,后面跟的是在配置文件中定义的name
    			DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mail");
    			//获取数据库连接
    			conn = ds.getConnection();
    			System.out.println("connection connected !");
    		} catch (NamingException e) {
    			System.out.println(e.getMessage());
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return conn;
    	}
    }
    

    运行项目,得到connection connected !输出,查看数据库表中数据,添加成功。


  • 相关阅读:
    分享我设计的iOS项目目录结构
    swift语言之多线程操作和操作队列(下)———坚持51天吃掉大象(写技术文章)
    swift语言之多线程操作和操作队列(上)———坚持51天吃掉大象
    获取UIColor中的RGB值(本人亲测多个获取RGB值的方法,这个最有效)
    swift语言开发的一个游戏------熊猫跑酷(KongfuPanda)
    ios上传应用后,审核流程完成前(reveiw)修改了程序内容,如何上传替换
    上架app 到app store 的出现: “The IPA is invalid. It does not inlude a Payload directory.”错误处理
    ios 8+ (xcode 6.0 +)应用程序Ad Hoc 发布前多设备测试流程详解
    Swift 实现iOS Animation动画教程
    新浪微博项目---首页技术点三.上拉刷新,下拉加载的实现(使用ios自带的小菊花实现)
  • 原文地址:https://www.cnblogs.com/duzhentong/p/7816538.html
Copyright © 2011-2022 走看看