之前说到了利用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 !输出,查看数据库表中数据,添加成功。

用JNDI连接数据库的更多相关文章

  1. tomcat6配置jndi连接数据库的方式

    eworkflow工作流+eform表单+ebiao报表集成在一起,用tomcat6发布,并用jndi连接数据库,数据库是sqlserver2005,配置如下: 1.在tomcat6\conf\con ...

  2. 使用JNDI连接数据库

    第一步:实现一个Java类: package com.logistic.data; import java.sql.*;import javax.sql.*;import javax.naming.* ...

  3. JNDI连接数据库的详细步骤 以及简要的c3po数据库连接的配置

    第一步在tomcat的context.xml文件中配置数据源:context.xml的路径形式是:D:\Program Files (x86)\apache-tomcat-6.0.44\conf\co ...

  4. Tomcat,Jboss,Weblogic通过jndi连接数据库

    1.  Tomcat配置Jndi数据源 1.1在tomcat服务器的lib目录下加入数据库连接的驱动jar包 1.2修改tomcat服务器的conf目录下server.xml配置文件 编辑server ...

  5. jndi连接数据库配置过程总结

    一.我们先找到tomcat安装目录中conf目录下的context.xml更改里面的内容: <?xml version='1.0' encoding='utf-8'?> <Conte ...

  6. Quartz集群配置

    先看看quartz的持久化基本介绍: 引用 1 大家都清楚quartz最基本的概念就是job,在job内调用具体service完成具体功能,quartz需要把每个job存储起来,方便调度,quartz ...

  7. javax.naming.NoInitialContextException错误的解决方案

    今天,学习用了一下nutz框架,写了一个HelloWorld的小程序,在用jndi配置数据源时,写了一个测试类,并在main方法中调用了jndi获得数据库连接,但是报错了,错误信息如下: javax. ...

  8. javax.naming.NoInitialContextException: Need to specify class name in environment or system property

    javax.naming.NoInitialContextException: Need to specify class name in environment or system property ...

  9. Tomcat 配置连接池

    1. Tomcat 配置 JNDI 资源 JNDI(Java Naming and Directory Interface), Java 命名和目录接口; JNDI 作用: 在服务器上配置资源, 然后 ...

随机推荐

  1. TCP协议—三次握手四次挥手的原理<转>

    三次握手四次挥手的原理   TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.在TCP/IP协议中,TCP 协议提供可靠的连接服务,连接是通过三次握手进行初始化的.三 ...

  2. V4L2驱动的移植与应用(三)

    三.V4L2的demo capture.c是官方示例程序. capture.c 程序中的 process_image 函数: capture.c 程序主要是用来演示怎样使用 v4l2 接口,并没有对采 ...

  3. dm642的中断定时器

    TIMER_Handle TimerHandle0; void timer1() { ////////////定时器///////////////////////  TimerHandle0 = TI ...

  4. Android HTTP请求用HttpUrlConnection与HttpClient比较

    在安卓和JAVA应用开发中需要访问网络,少不了要提交HTTP请求,而基本上目前有两个实现方式:HttpUrlConnection(即URL.openConnection)和HttpClient. 网上 ...

  5. CAN控制器-配置过滤器

    首先简单介绍一下CAN总线,关于CAN总线是谁发明的,CAN总线的历史,CAN总线的发展,CAN总线的应用场合,这些,通通不说.这里只是以我个人理解,简单说说CAN通信.CAN总线的端点没有地址(除非 ...

  6. Java中的表达式运算

    1.问题背景    以下代码运行的结果为:    A.a的值:8   b的值:7           B.a的值:8  b的值:8    C.a的值:9   b的值:7           D.a的值 ...

  7. vue cli创建的项目 当你后期使用了ES6语法,如何解决浏览器兼容问题

    最近开发了一个项目,开发过程中,由于需要使用了async await ,于是发现,只有少数的浏览器支持,极大多数的浏览器是不支持这玩意的,在网上各种找解决方案,基本都是失败,最后总结了两个方案之后,尝 ...

  8. python实现列表倒叙打印

    def func(listNode): listNode.reverse() for i in listNode: print(i) li = [1,2,3,4,5] func(li) 利用pytho ...

  9. 页面某些特定图标的权限,比如导入导出表格,下载等等,这个权限必须在有某个页面查看的权利的基础上(细粒度)(shiro项目中来的四)

    一,查找按钮权限的设置 第一步:会根据用户的相关信息去查到它的角色表: SELECT * FROM SYS_USER WHERE user_id='eded77bdf35347249b2bacfa18 ...

  10. Unity3D 引擎基础 C# (数据结构入门) Unity3D 界面 UI(NGUI)(动画系统,导航系统)(委托与事件,常用设计模式)

    Geomagic Sculpt 2016.2 Windows Software 11个月前 (01-17) 0评论 Geomagic Sculpt 触觉式三维设计 触碰您的设计使用三维工具做三维设计. ...