zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    MVC3、如何应用EntityFramework 连接MySql 数据库 Kevin
    DEV EXPRESS Summary Footer 不显示 Kevin
    装饰模式 Kevin
    Dev 控件 GridControl 控件 二次绑定数据源的问题。 Kevin
    System.InvalidOperationException 异常 Kevin
    LINQ to XML Kevin
    代理模式——代码版“吊丝的故事” Kevin
    VS2012 中的设备 面板 Kevin
    maven 学习笔记(三)创建一个较复杂的 eclipse+android+maven 工程
    maven 学习笔记(一)eclipse+android+maven
  • 原文地址:https://www.cnblogs.com/FlySheep/p/3679255.html
Copyright © 2011-2022 走看看