Java Web总结十五之一JNDI、元数据、DBUtils

一、JNDI

  1、JNDI(Java Naming and Directory Interface),Java命名和目录接口,不同的Web服务器有着不同的实现。

  2、JNDI和JDBC一样,都属于JavaEE规则之一。

二、在Tomcat中配置DBCP连接池

  1、修改tomcat/conf/context.xml文件。context.xml代码如下:

<?xml version='1.0' encoding='utf-8'?>
<Context>
    <Resource name="jdbc/tomcatRS" auth="Container" type="javax.sql.DataSource"
        username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://127.0.0.1:3306/mydb3" maxActive="8" maxIdle="4" />
</Context>

  2、加入DB相关的jar包到tomcat/lib目录下。例如使用MySql则是mysql-connector-java-5.0.8-bin.jar。

  3、重新启动tomcat服务器。

三、访问tomcat服务器的JNDI代码如下,是固定的:

package com.gnnuit.jdbc.web;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

//通过JNDI远程访问数据库服务器
public class JndiServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        try {
            // 创建具体web服务器的JNDI对象
            Context initCtx = new InitialContext();
            // 远程查找web服务器
            Context envCtx = (Context) initCtx.lookup("java:comp/env");
            // 在web服务器内远程查找DBCP连接池服务
            DataSource ds = (DataSource) envCtx.lookup("jdbc/tomcatRS");
            // 从DBCP连接池中取得一个空闲的连接
            Connection conn = ds.getConnection();
            if (conn != null) {
                response.getWriter().write("获得数据库连接");
                conn.close();
            }
        } catch (NamingException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

    }

}

五、元数据的使用

  1、想取得对数据库相关信息的描述,可以使用元数据。

  2、DatabaseMetaData/DatabaseMetaData dbmd = conn.getMetaData()

  3、ParameterMetaData/ParameterMetaData psmd = pstmt.getParameterMetaData();

  4、ResultSetMetaData/ResultSetMetaData rsmd = rs.getMetaData();

六、DBUtils框架的使用

  使用前需要导入commons-dbutils-1.5.jar包。

  1、目的:简化CURD操作。

  2、DBUtils框架最核心的类,就是QueryRunner类,构造其有两种方式:

    1)空参构造

    2)通过DataSource构造

  3、DBUtils对象的update方法,内部已经关闭了相关的连接对象

  4、update(Connection)方法带有Connection对象的,需要手工关闭,其他对象自动关闭。

    update()方法无Connection对象的,DBUtils框架自动关闭

  5、为什么作者要这样设计?

    主要考虑到在分层结构中,需要用到同一个Connection的问题。

  6、对于query()操作和update()操作有着一致的含义。

  7、对于query()操作的实现类含义如下:

    BeanHandler/BeanListHandler:针对JavaBean

    ArrayHandler/ArrayListHandler:针对数组

    MapHandler/MapListHandler:针对Map

    ScalarHandler:针对Long

原文地址:https://www.cnblogs.com/FlySheep/p/3679255.html