一、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