- 浏览: 65383 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
77095729:
刚好找到,谢谢 分享
Eclipse中vi插件使用方法 快捷键 -
leongod:
wangying641588 写道楼主在哪里Ctrl+c,Ct ...
面试前准备 -
wangying641588:
楼主在哪里Ctrl+c,Ctrl+v 的这些内容,好古董啊!真 ...
面试前准备 -
leongod:
zhao_chong 写道跟真的似的,整那么多虚的不如好好提升 ...
面试前准备 -
leongod:
thinmonkey 写道楼主就是这样面试的?
楼主是给自己也 ...
面试前准备
1. 介绍
commons-dbutils是Apache组织提供的一个开源 JDBC工具类库,能让我们更简单的使用JDBC。它是一个非常小的类包,花几分钟的时间就能掌握它的使用。
2. 下载
进入apache官方网站的commons-dbutils网页:http://commons.apache.org/dbutils/
选择左边导航栏的Download进入下载页面:
Binary:是编译好的jar包;source是源代码包。下载一份Binary到本地。解开后如下图所示:
其中commons-dbutils-1.1.jar就是供使用的jar包;docs是这个组件的帮助文档。下面就通过示例介绍它的使用。
3. API介绍
commons-dbutils是一个非常小的类包, 无需花费太多时间去阅读它的doc,核心只是两个类 org.apache.commons.dbutils.DbUtils、org.apache.commons.dbutils.QueryRunner和一个接口org.apache.commons.dbutils.ResultSetHandler。
3.1. DbUtils类
DbUtils是一个用来做一些如关闭连接、装载JDBC驱动程序之类的常规工作提供有用方法的类,它里面所有的方法都是静态的。
这个类里的重要方法有:
n public static void close(…) throws java.sql.SQLException: DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭Connection、Statement和ResultSet。
n public static void closeQuietly(…): 这一类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception。如果你不想捕捉这些异常的话,这对你是非常有用的。在重载CloseQuietly方法时,特别有用的一个方法是closeQuietly(Connection conn,Statement stmt,ResultSet rs),这是因为在大多数情况下,连接、声明和结果集(ResultSet)是你要用的三样东西,而且在最后的块你必须关闭它们。使用这一方法,你最后的块就可以只需要调用这一方法即可。
n public static void CommitAndCloseQuietly(Connection conn): 这一方法用来提交连接,然后关闭连接,并且在关闭连接时不向上抛出在关闭时发生的一些SQL异常。
n public static boolean loadDriver(java.lang.String driverClassName):这一方法装载并注册JDBC驱动程序,如果成功就返回true。使用这种方法,你不需要去捕捉这个异常ClassNotFoundException。
3.2. QueryRunner类
这个类简单化了执行SQL查询,它与ResultSetHandler组合在一起使用就可能完成大部分的数据库操作,它能够大大减少你所的编码量。
QueryRunner类提供了两个构造方法:一个是默认的构造方法;另一个需要一个 javax.sql.DataSource 来作为参数。因此,在你不用为一个方法提供一个数据库连接的情况下,提供给构造器的DataSource)被用来获得一个新的连接并将继续进行下去。
这个类中的重要方法包括以下这些:
n public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法它会内在地处理PreparedStatement 和ResultSet 的创建和关闭。最重要的是参数ResultSetHandler会把从 ResultSet中获得的数据转换成一个更容易的或是应用程序特定的格式供我们使用。
n public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException: 这几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得的。
n public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 执行一个不需要置换参数的查询操作。
n public int update(Connection conn, String sql, Object[] params) throws SQLException:用来执行一个更新(插入、更新或删除)操作。
n public int update(Connection conn, String sql) throws SQLException:用来执行一个更新操作,不需要置换参数。
3.3. ResultSetHandler接口
正如它的名字所提示的,这一接口执行处理一个jaca.sql.ResultSet,将数据按要求转换为另一种形式。
ResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。因此任何ResultSetHandler 的执行需要一个结果集(ResultSet)作为参数传入,然后才能处理这个结果集,再返回一个对象。因为返回类型是java.lang.Object,所以除了不能返回一个原始的Java类型之外,其它的返回类型并没有什么限制。。
common-dbutils组件包针对这个接口提供了九个实现类:
n ArrayHandler:把结果集中的第一行数据转成对象数组。
n ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。
n BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
n BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
n ColumnListHandler:将结果集中某一列的数据存放到List中。
n KeyedHandler:将结果集中的每一行数据都封装到一个Map里,然后再根据指定的key把每个Map再存放到一个Map里。
n MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
n MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
n ScalarHandler:将结果集中某一条记录的其中某一列的数据存成Object
如果这九个实现类中没有任何一个提供了你想要的服务,你可以自己写一个实现类。
3.4. 其它类和接口
org.apache.commons.dbutils.QueryLoader类:属性文件加载器,主要用于加载属性文件中的SQL到内存中。
org.apache.commons.dbutils.wrappers.SqlNullCheckedResultSet类:这个类是用来对sql语句执行完成之后的的数值进行null的替换。
org.apache.commons.dbutils.wrappers.StringTrimmedResultSet类: 去除ResultSet中字段的左右空格。
org.apache.commons.dbutils.RowProcessor接口: 它提供了把结果集的行数据转换成其它格式的功能。它的实现类是org.apache.commons.dbutils.BasicRowProcessor类。
例子:
表结构可以参照javabean普通
1.数据库连接类:DBConnection.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnection {
private static DBConnection instance = new DBConnection();
public static DBConnection getInstance(){
return instance;
}
public Connection getConn(){
Connection conn=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xxx","xxx", "xxx");
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
}
2. 普通JavaBean:InfoBean.java
public class InfoBean {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3. 数据库操作:Oper.java
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
public class Oper {
private static Oper instance = new Oper();
public static Oper getInstance(){
return instance;
}
/**
* 获取全部内容(使用MapListHandler)
*
* @return
*/
public List<?> getAll() throws SQLException{
String sql="select id,name from test";
return query(sql, null, null);
}
/**
* 获取全部内容(使用BeanListHandler)
*
* @return
*/
public List<?> getAllByBean() throws SQLException{
String sql="select id,name from test";
return query(sql, null, InfoBean.class);
}
/**
* 根据条件获取内容
*
* @param id
* @return
*/
public List<?> getInfoById(String id) throws SQLException{
String sql="select id,name from test where id = ?";
Object[] object = new Object[1];
object[0]=id;
return query(sql, object, InfoBean.class);
}
/**
* 添加内容
*
* @throws SQLException
*/
public void insert() throws SQLException{
String sql="insert into test(id,name) values(?,?)";
Object[] object = new Object[2];
object[0]="5";
object[1]="ee";
operDB(sql,object);
}
/**
* 根据ID修改内容
*
* @throws SQLException
*/
public void update(String id) throws SQLException{
String sql="update test set name = ? where id = ? ";
Object[] object = new Object[2];
object[0]="ee1";
object[1]=id;
operDB(sql,object);
}
/**
* 根据ID删除内容
*
* @throws SQLException
*/
public void delete(String id) throws SQLException{
String sql="delete from test where id = ? ";
Object[] object = new Object[1];
object[0]=id;
operDB(sql,object);
}
/**
* 数据库操作方法
*
* @param sql sql语句
* @param object 参数
* @throws SQLException
*/
private void operDB(String sql, Object[] object) throws SQLException{
Connection conn=DBConnection.getInstance().getConn();
try {
QueryRunner qr=new QueryRunner();
qr.update(conn, sql,object);
}
catch (SQLException e) {
throw e;
}finally{
DbUtils.close(conn);
}
}
/**
* 查询操作
*
* @param sql sql语句
* @param param 参数
* @return
* @throws SQLException
*/
public List<?> query(String sql, Object[] param, Class<?> clazz) throws SQLException{
List<?> list = null;
Connection conn=DBConnection.getInstance().getConn();
QueryRunner qr=new QueryRunner();
try {
if(clazz!=null){
list=(List<?>)qr.query(conn, sql, new BeanListHandler(clazz), param);
}else{
list=(List<?>)qr.query(conn,sql, new MapListHandler(), param);
}
}
catch (SQLException e) {
throw e;
}finally{
DbUtils.close(conn);
}
return list;
}
public static void main(String[] args) {
try {
List<?> l=Oper.getInstance().getAll();
for(Object temp:l){
Map<?,?> map=(Map<?,?>)temp;
System.out.println(map.get("name"));
}
//
// List<?> l=Oper.getInstance().getAllByBean();
// for(Object temp:l){
// InfoBean ib=(InfoBean)temp;
// System.out.println(ib.getName());
// }
//
// List<?> l = Oper.getInstance().getInfoById("1");
// for(Object temp:l){
// InfoBean ib=(InfoBean)temp;
// System.out.println(ib.getName());
// }
// Oper.getInstance().insert();
// Oper.getInstance().update("4");
// Oper.getInstance().delete("5");
}
catch (SQLException e) {
e.printStackTrace();
}
}
}
发表评论
-
mysql+myca搭建稳定高可用集群,负载均衡,主备复制,读写分离
2016-10-16 11:09 1161数据库性能优化普遍采用集群方式,oracle集群软硬件投入 ... -
Tomcat做成系统服务+ 生产服务器性能优化
2016-01-13 10:42 723服务器优化: http://www.oschina.net ... -
如何修改tomcat进程的名称(windows)
2015-12-27 13:47 15291、window平台: 打开tomcat_h ... -
有图有真相。windows环境下配置tomat+redis+nginx集群共享session
2015-11-10 16:50 2323一直想搞一下tomcat集 ... -
提高AJAX客户端响应速度
2013-06-04 23:08 940提高AJAX客户端响应速度 (文:包一磊) AJAX ... -
TOMCAT启动参数配置
2013-06-04 01:03 1120set JAVA_OPTS=-server -Xms1024m ... -
PowerDesigner15 逆向工程不生成physical option及NAME/CODE转换
2013-06-02 07:45 984在使用PowerDesigner15 逆向工程转换PDM后 ... -
改善JAVA程序的151个建议(一)
2012-12-29 13:03 0第一章 通用方法和原则 (P6)KISS原则: keep ... -
document.createElement()的用法
2011-09-06 09:37 1566document.createElement()的用 ... -
spring原理
2011-09-04 22:10 2478什么是Spring,他有什么特 ... -
JNIEnv的哲学
2011-07-25 14:18 1240Java通过JNI 机制调用c/c+ ... -
听新浪微博视频谈高性能站点
2011-07-06 00:15 8701.用redis. http://baike.baidu.c ... -
Eclipse中vi插件使用方法 快捷键
2011-07-02 08:24 3696原创博文, 版权所有!转载请注明出处:http://blog. ... -
Java日期操作常用方法
2011-05-31 11:39 868代码:/** * 取得指定月份的第一天 * * @param ... -
myeclipse8集成jbpm4方法,绝对可以用
2011-05-31 11:37 992myeclipse8集成jbpm4时,出现更新较慢的情形.请按 ... -
swing界面开发
2011-05-31 11:34 1319最近移植c#开发项目,重写为java版本,对于本地应用部分采用 ... -
JPanel放置到JScrollPane里面并显示滚动条
2011-05-31 11:33 6525一开始,我是知道不能直接在JScrollPane对象里用add ... -
java 不重复随机数生成
2011-05-31 11:31 947public static void main(String[ ...
相关推荐
**正文** `commons-dbutils.jar.rar` 是一个包含Apache Commons DBUtils库的不同版本的压缩文件,主要用于Java应用程序中的...无论是在学习还是在实际开发中,了解和掌握DBUtils都是提高数据库操作效率的重要一步。
此外,使用了c3p0作为数据库连接池,ytf_tool.jar用于数据库的连接和事务处理,以及commons-bean-utils.jar、commons-logging.jar和commons-dbutils.jar用于辅助开发。 ### 系统架构设计 系统采用了MVC(Model-View...
`DBUtils`是Apache Commons DbUtils的一个工具包,简化了JDBC的使用。 - **关键点**: - 使用`QueryRunner`执行SQL语句。 - `BeanHandler`和`BeanListHandler`用于将查询结果转换为JavaBean对象。 - `MapHandler`...
最后,使用 `DbUtils.close()` 关闭数据库连接,这一步是必须的,以确保资源被正确释放。 在 `Blog` 类中,定义了表示博客条目的属性 `id`、`title` 和 `content`,以及对应的 getter 和 setter 方法。查询结果会被...
2. **使用辅助类**:对于复杂的动态SQL构造,可以考虑使用辅助类来帮助构建SQL语句,如Apache Commons DBUtils等。 #### 六、批处理的优化 批量处理多条SQL语句时,使用`PreparedStatement`和`addBatch()`方法可以...