• 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

  • 相关阅读:
    在wepy里面使用redux
    使用es6的蹦床函数解决递归造成的堆栈溢出
    解决layui下拉选择框只能选择不能手动输入文字
    POJ 2230 Watchcow (欧拉回路)
    POJ 2337 Catenyms (欧拉回路)
    POJ 2513 Colored Sticks (欧拉回路 + 字典树 +并查集)
    HDU 3018 Ant Trip (欧拉回路)
    HDU 1023 Train Problem II (大数卡特兰数)
    HDU 2067 小兔的棋盘 (卡特兰数)
    HDU 3584 Cube (三维数状数组)
  • 原文地址:https://www.cnblogs.com/FlySheep/p/3679255.html
Copyright © 2020-2023  润新知