jdbc详解(三)

本文介绍了数据库连接池的概念及其实现方式,包括DBCP和C3P0两种流行的开源连接池方案。同时,文章深入探讨了如何利用Apache Commons-dbutils框架简化JDBC编程,提高开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开源数据库连接池
l现在很多WEB服务器(Weblogic,WebSphere, Tomcat)都提供了DataSoruce的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。
l也有一些开源组织提供了数据源的独立实现:
•DBCP 数据库连接池
•C3P0 数据库连接池
l实际应用时不需要编写连接数据库代码,直接从数据源获得数据库的连接。程序员编程时也应尽量使用这些数据源的实现,以提升程序的数据库访问性能。
DBCP数据源
lDBCP 是Apache软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个jar文件:
•Commons-dbcp.jar:连接池的实现
•Commons-pool.jar:连接池实现的依赖库
lTomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。
DBCP数据源
static{
InputStream in =JdbcUtil.class.getClassLoader().
getResourceAsStream(“dbcpconfig.properties”);
Properties prop = newProperties();
prop.load(in);
BasicDataSourceFactoryfactory =newBasicDataSourceFactory();
dataSource =factory.createDataSource(prop);
}
C3P0数据源

JNDI技术简介
lJNDI(Java Naming and DirectoryInterface),Java命名和目录接口,它对应于J2SE中的javax.naming包,
l这套API的主要作用在于:它可以把Java对象放在一个容器中(JNDI容器),并为容器中的java对象取一个名称,以后程序想获得Java对象,只需通过名称检索即可。
l其核心API为Context,它代表JNDI容器,其lookup方法为检索容器中对应名称的对象。
编写自己的JDBC框架
元数据-DataBaseMetaData
l元数据:数据库、表、列的定义信息。
lConnection.getDatabaseMetaData()
lDataBaseMetaData对象
•getURL():返回一个String类对象,代表数据库的URL。
•getUserName():返回连接当前数据库管理系统的用户名。
•getDatabaseProductName():返回数据库的产品名称。
•getDatabaseProductVersion():返回数据库的版本号。
•getDriverName():返回驱动驱动程序的名称。
•getDriverVersion():返回驱动程序的版本号。
•isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。
元数据-ParameterMetaData
lPreparedStatement .getParameterMetaData()
•获得代表PreparedStatement元数据的ParameterMetaData对象。
•Select* from user where name=? And password=?
lParameterMetaData对象
•getParameterCount()
•获得指定参数的个数
•getParameterType(int param)
•获得指定参数的sql类型
元数据-ResultSetMetaData
lResultSet.getMetaData()
•获得代表ResultSet对象元数据的ResultSetMetaData对象。
lResultSetMetaData对象
•getColumnCount()
•返回resultset对象的列数
•getColumnName(int column)
•获得指定列的名称
• getColumnTypeName(int column)
•获得指定列的类型
使用元数据简化JDBC代码
l业务背景:系统中所有实体对象都涉及到基本的CRUD操作:
•所有实体的CUD操作代码基本相同,仅仅发送给数据库的SQL语句不同而已,因此可以把CUD操作的所有相同代码抽取到工具类的一个update方法中,并定义参数接收变化的SQL语句。
•实体的R操作,除SQL语句不同之外,根据操作的实体不同,对ResultSet的映射也各不相同,因此可义一个query方法,除以参数形式接收变化的SQL语句外,可以使用策略模式由qurey方法的调用者决定如何把ResultSet中的数据映射到实体对象中。
O-RMapping简介
l什么是O-R Mapping
l常用O-R Mapping映射工具
•Hibernate
•Ibatis
•CommonsDbUtils(只是对JDBC简单封装)
Apache—DBUtils框架
lcommons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选。
lAPI介绍:
•org.apache.commons.dbutils.QueryRunner
•org.apache.commons.dbutils.ResultSetHandler
•工具类
•org.apache.commons.dbutils.DbUtils、。
DbUtils类
lDbUtils:提供如关闭连接、装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的。主要方法如下:
•public static void close(…) throwsjava.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.StringdriverClassName):这一方装载并注册JDBC驱动程序,如果成功就返回true。使用该方法,你不需要捕捉这个异常ClassNotFoundException。
QueryRunner类
l该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。
lQueryRunner类提供了两个构造方法:
•默认的构造方法
•需要一个 javax.sql.DataSource来作参数的构造方法。
QueryRunner类的主要方法
lpublicObject query(Connection conn, Stringsql, Object[]params, ResultSetHandlerrsh) throwsSQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理PreparedStatement和ResultSet的创建和关闭。
lpublicObject query(Stringsql, Object[]params, ResultSetHandlerrsh) throwsSQLException: 几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource)或使用的setDataSource方法中重新获得Connection。
l
lpublicObject query(Connection conn, Stringsql,ResultSetHandlerrsh) throwsSQLException :执行一个不需要置换参数的查询操作。
l
lpublicintupdate(Connection conn, Stringsql, Object[]params) throws SQLException:用来执行一个更新(插入、更新或删除)操作。
l
lpublicintupdate(Connection conn, Stringsql) throwsSQLException:用来执行一个不需要置换参数的更新操作。
ResultSetHandler接口
l该接口用于处理java.sql.ResultSet,将数据按要求转换为另一种形式。
lResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。
ResultSetHandler接口的实现类
lArrayHandler:把结果集中的第一行数据转成对象数组。
lArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
lBeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
lBeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。

lColumnListHandler:将结果集中某一列的数据存放到List中。
lKeyedHandler(name):将结果集中的每一行数据都封装到一个Map<列名,列值>里,再把这些map再存到一个map里,其key为指定的key。
lMapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
lMapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
注意事项
l不管java的对象存在何种关系,反映到关系型数据库中,都是使用外键表示纪录(即对象)的关联关系。
l设计java对象如涉及到多个对象相互引用,要尽量避免使用一对多,或多对多关系,而应使用多对一描述对象之间的关系(或使用延迟加载的方式)。

内容概要:本文档详细介绍了Analog Devices公司生产的AD8436真均方根-直流(RMS-to-DC)转换器的技术细节及其应用场景。AD8436由个独立模块构成:轨到轨FET输入放大器、高动态范围均方根计算内核和精密轨到轨输出放大器。该器件不仅体积小巧、功耗低,而且具有广泛的输入电压范围和快速响应特性。文档涵盖了AD8436的工作原理、配置选项、外部组件选择(如电容)、增益调节、单电源供电、电流互感器配置、接地故障检测、相电源监测等方面的内容。此外,还特别强调了PCB设计注意事项和误差源分析,旨在帮助工程师更好地理解和应用这款高性能的RMS-DC转换器。 适合人群:从事模拟电路设计的专业工程师和技术人员,尤其是那些需要精确测量交流电信号均方根值的应用开发者。 使用场景及目标:①用于工业自动化、医疗设备、电力监控等领域,实现对交流电压或电流的精准测量;②适用于手持式数字万用表及其他便携式仪器仪表,提供高效的单电源解决方案;③在电流互感器配置中,用于检测微小的电流变化,保障电气安全;④应用于相电力系统监控,优化建立时间和转换精度。 其他说明:为了确保最佳性能,文档推荐使用高质量的电容器件,并给出了详细的PCB布局指导。同时提醒用户关注电介质吸收和泄漏电流等因素对测量准确性的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值