l 配置Tomcat数据源

示例代码:

context.xml

<Context>
<Resource name="jdbc/testDB"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test"
maxActive="8"
maxIdle="4" />
</Context>

DemoServlet.java

package com.hbsi.servlet;
import java.io.IOException;
import java.sql.Connection;
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;
public class DemoServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
//初始化jndi容器
Context initCxt = new InitialContext();
//检索出web服务器中的jndi容器
Context envCxt =(Context) initCxt.lookup("java:comp/env");
//从jndi容器中检索出连接池
DataSource ds = (DataSource) envCxt.lookup("jdbc/testDB");
Connection conn = ds.getConnection();
System.out.println(conn);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

运行结果:

JNDI技术简介

lJNDI(Java Naming and DirectoryInterface),Java命名和目录接口,它对应于J2SE中的javax.naming包,

l 这套API的主要作用在于:它可以把Java对象放在一个容器中(JNDI容器),并为容器中的java对象取一个名称,以后程序想获得Java对象,只需通过名称检索即可。

l 其核心API为Context,它代表JNDI容器,其lookup方法为检索容器中对应名称的对象。

编写自己的JDBC框架

l 元数据-DataBaseMetaData

l 元数据:数据库、表、列的定义信息。

lConnection.getDatabaseMetaData()

lDataBaseMetaData对象

lgetURL():返回一个String类对象,代表数据库的URL。

lgetUserName():返回连接当前数据库管理系统的用户名。

lgetDatabaseProductName():返回数据库的产品名称。

lgetDatabaseProductVersion():返回数据库的版本号。

lgetDriverName():返回驱动驱动程序的名称。

lgetDriverVersion():返回驱动程序的版本号。

lisReadOnly():返回一个boolean值,指示数据库是否只允许读操作。

l 元数据-ParameterMetaData

lPreparedStatement .getParameterMetaData()

l 获得代表PreparedStatement元数据的ParameterMetaData对象。

lSelect * from user where name=?And password=?

lParameterMetaData对象

lgetParameterCount()

l 获得指定参数的个数

lgetParameterType(int param)

l 获得指定参数的sql类型

lResultSet. getMetaData()

l 获得代表ResultSet对象元数据的ResultSetMetaData对象。

lResultSetMetaData对象

lgetColumnCount()

l 返回resultset对象的列数

lgetColumnName(int column)

l 获得指定列的名称

lgetColumnTypeName(int column)

l 获得指定列的类型

l 使用元数据简化JDBC代码

l 业务背景:系统中所有实体对象都涉及到基本的CRUD操作:

l 所有实体的CUD操作代码基本相同,仅仅发送给数据库的SQL语句不同而已,因此可以把CUD操作的所有相同代码抽取到工具类的一个update方法中,并定义参数接收变化的SQL语句。

l 实体的R操作,除SQL语句不同之外,根据操作的实体不同,对ResultSet的映射也各不相同,因此可义一个query方法,除以参数形式接收变化的SQL语句外,可以使用策略模式由qurey方法的调用者决定如何把ResultSet中的数据映射到实体对象中。

Apache—DBUtils框架

lcommons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选。

l API介绍:

•org.apache.commons.dbutils.QueryRunner--BDManager

•org.apache.commons.dbutils.ResultSetHandler—处理结果集

• 工具类

•org.apache.commons.dbutils.DbUtils、。

DbUtils类

lDbUtils :提供如关闭连接、装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的。主要方法如下:

•public static void close(…)throws java.sql.SQLException: DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭Connection、Statement和ResultSet。

•public static voidcloseQuietly(…): 这一类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception。

•public static voidcommitAndCloseQuietly(Connection conn):用来提交连接,然后关闭连接,并且在关闭连接时不抛出SQL异常。

•public static booleanloadDriver(java.lang.String driverClassName):这一方装载并注册JDBC驱动程序,如果成功就返回true。使用该方法,你不需要捕捉这个异常ClassNotFoundException。

QueryRunner类

l 该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。

lQueryRunner类提供了两个构造方法:

• 默认的构造方法

• 需要一个javax.sql.DataSource 来作参数的构造方法。

QueryRunner类的主要方法

lpublic Object query(Connectionconn, String sql, Object[] params,ResultSetHandler rsh) throws SQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭

lpublic Object query(String sql,Object[] params, ResultSetHandler rsh) throwsSQLException: 几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource方法中重新获得Connection。

lpublic Object query(Connectionconn, String sql, ResultSetHandler rsh) throwsSQLException : 执行一个不需要置换参数的查询操作。

lpublic int update(Connectionconn, String sql, Object[] params) throwsSQLException:用来执行一个更新(插入、更新或删除)操作。

lpublic int update(Connectionconn, String sql) throws SQLException:用来执行一个不需要置换参数的更新操作。

ResultSetHandler接口

l 该接口用于处理java.sql.ResultSet,将数据按要求转换为另一种形式。

lResultSetHandler 接口提供了一个单独的方法:Object handle(java.sql.ResultSet .rs)。

ResultSetHandler 接口的实现类

lArrayHandler:把结果集中的第一行数据转成对象数组。

lArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。

lBeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。

lBeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。

ResultSetHandler 接口的实现类

lColumnListHandler:将结果集中某一列的数据存放到List中。

lKeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。

lMapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。

lMapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List

 

2011级-csdn-java-张侃— JDBC开发—连接池(二)相关推荐

  1. 2011级-csdn-java-张侃— JDBC开发—连接池(一)

    l      应用程序直接获取链接的缺点 l      缺点:用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需 ...

  2. java连接池域名切换_java - 使用JDBC的连接池选项:DBCP与C3P0

    java - 使用JDBC的连接池选项:DBCP与C3P0 什么是可用于Java / JDBC的最佳连接池库? 我正在考虑2个主要候选人(免费/开源): Apache DBCP - [http://c ...

  3. JDBC数据源连接池(1)---DBCP

    何为数据源呢?也就是数据的来源.我在前面的一篇文章<JDBC原生数据库连接>中,采用了mysql数据库,数据来源于mysql,那么mysql就是一种数据源.在实际工作中,除了mysql,往 ...

  4. JDBC通过连接池链接数据库总是失败的解决办法

    应用服务器:glassfish JDBC通过连接池链接数据库总是失败,通过查看日志,发现是APACHE报DHCP 错误, 只需要通过访问4848端口的管理程序,重新PING下JDBC当前连接池即可.

  5. 「超市管理系统——商品管理」 · Java Swing + MySQL JDBC开发

    项目下载:超市管理系统JavaSwing+MySQLJDBC开发_javamysql超市管理系统-互联网文档类资源-CSDN下载 1.9元付费赞助下载:超市管理系统JavaSwing+MySQLJDB ...

  6. 「会员卡管理系统」 · Java Swing + MySQL JDBC开发

    目录 目录 一.语言和环境 二.实现功能 三.数据库设计 四.具体要求及推荐实现步骤 五.注意事项 六.评分标准 >>>实现代码: 数据库 com.ynavc.Bean com.yn ...

  7. 「物流跟踪管理系统」 · Java Swing + MySQL JDBC开发,美和易思结业考试机试试题

    目录 文档说明: 一.语言和环境 二.技术要求 三.功能要求 四.数据库设计 五.具体要求及推荐实现步骤 六.注意事项 实现代码: 一.数据库 二.Java Swing com.ynavc.Bean ...

  8. 大数据笔记16—java基础篇12(JDBC 、连接池、事务)

    目录 JDBC jdbc概述 jdbc入门案例 API详解 jdbc工具类 预编译执行平台 1.SQL注入问题(安全问题) 2API详解:预处理对象(PreparedStatement) 使用连接池重 ...

  9. Java 原始的JDBC方式连接MySQL数据库【钢镚核恒】

    Java JDBC 简介 JDBC(Java DataBase Connectivity,Java数据库连接) JDBC 可让Java通过程序操作关系型数据库 JDBC 基于驱动程序实现与数据库的连接 ...

最新文章

  1. Expect自动化控制简单介绍
  2. 几种流行Webservice框架性能对照
  3. iOS中加载Flutter中的图片
  4. Linux下载安装zookeeper
  5. 【java学习之路】(java SE篇)005.面向对象基础入门part2
  6. “带锁的门”问题,并有c语言和python代码运行效率对比
  7. 9-4-插值查找-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
  8. visa虚拟卡生成器_英国虚拟卡 获取多张VISA和Mastercard
  9. spark编程基础python版 pdf_《Spark编程基础(Scala版)》.PDF
  10. iWebShop 二次开发之商城后台模板渲染流程
  11. 批量生成MySQL不重复手机号大表
  12. 我的分形屏保 国王风暴《KingBlizzard》
  13. 【opencv】轮廓特征(质心,面积,周长,近似轮廓,凸包,凸度,边界矩形,直角矩形,旋转矩形,最小闭合圈,拟合椭圆、直线)
  14. cisco(思科)交换机操作(基本查询命令)【一】
  15. 证途网:一建报考条件
  16. ThingJS技术分享:建筑建模常用软件一览 3D 可视化
  17. (转) 行人检测资源 综述文献
  18. 速卖通流量新赛道,AE Mall商家享有权益和招商标准,看这篇文章就好了
  19. usleep()和sleep()的区别
  20. 盘点FCPX可能会遇到的问题,快来看看有你遇到的吗

热门文章

  1. IntelliJ IDEA常用快捷键汇总
  2. 二维码识别模块在物流仓储、通道闸机的嵌入式应用
  3. name followed by “::“ must be a class or namespace name
  4. Base64编码解码原理详解
  5. 从 Salesforce 与 Veeva 合作历程,浅谈垂直型SaaS的初创及发展思路
  6. Oracle11gR2集群心跳单网卡改bond实施方案
  7. swagger2 介绍+注解说明
  8. 疫情令亚马逊销量大涨,贝索斯身家今年增240亿美元
  9. 实用汽车英语(一)——汽车基本结构
  10. 使用Bootstrap Bar来增加Onboarding Progress Bar功能。