TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
一、Commons dbutils是什么? commons-dbutils 是 Apache 组织提供的一个开源 JDBC 工具类库,对传统操作数据库的类进行二次封装,可以把结果集转化成List。 二、Commons dbutils主要相关类及接口的简介:
主要讲解两个类(org.apache.commons.dbutils.DbUtils 和org.apache.commons.dbutils.QueryRunner)和一个接口(org.apache.commons.dbutils.ResultSethandler)。 (1):DbUtils类:为做一些诸如关闭连接、装载JDBC驱动程序之类的常规工作提供有用方法的类,
它里面所有的方法都是静态的。 A:loadDriver(String driveClassName): 这一方法装载并注册JDBC驱动程序,如果成功就返回TRUE,不需要去捕捉ClassNotFoundException异常。通过返回值判断驱动程序是否加载成功。 B:public static void close() throws java.sql.SQLException方法:
DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭连接(Connection)、声明(Statement)或者结果集(ResultSet)对象。 C:closeQuietly方法:
closeQuietly这一方法不仅能在连接、声明或者结果集为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLException。如果你不想捕捉这些异常的话,这对你是非常有用的。在重载closeQuietly方法时,特别有用的一个方法是closeQuietly(Connection conn,Statement stmt,ResultSet rs),使用这一方法,你最后的块就可以只需要调用这一方法即可。 D: commitAndCloseQuietly(Connection conn)方法和commitAndClose (Connection conn)方法:
这两个方法用来提交连接,然后关闭连接,不同的是commitAndCloseQuietly(Connection conn)方法关闭连接时不向上抛出在关闭时发生的一些SQL异常而commitAndClose (Connection conn)方法向上抛出SQL异常。 (2):QueryRunner类:该类简单化了 SQL 查询,它与 ResultSetHandler(接口) 组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量
【构造函数
(1):QueryRunner()
(2):QueryRunner(Datasource ds)】。 A:query(Connection conn, String sql, Object[] params, ResultSetHandler rsh)方法:
这一方法执行一个带参数的选择查询,在这个查询中,对象数组的值被用来作为查询的置换参数。这一方法内在地处理PreparedStatement 和ResultSet 的创建和关闭。ResultSetHandler对象把从 ResultSet得来的数据转变成一个更容易的或是应用程序特定的格式来使用。 B:query(String sql, Object[] params, ResultSetHandler rsh)方法:这几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造器的数据源(DataSource) 或使用的setDataSource 方法中重新获得的。 C:query(Connection conn, String sql, ResultSetHandler rsh)方法:这执行一个带参数的选择查询。 D:update(Connection conn, String sql, Object[] params)方法:这一方法被用来执行一个带参数的插入、更新或删除操作。对象数组为置换参数。 E:update(String sql, Object[] params)方法: 这几乎与上一种种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造器的数据源(DataSource) 或使用的setDataSource 方法中重新获得的。 F:update(Connection conn, String sql)方法:这执行一个带参数的插入、更新或删除操作。 (3):ResultSetHandler接口:


三、实例:
-
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
- import java.util.*;
- import java.util.Map.Entry;
-
-
- import org.apache.commons.dbutils.DbUtils;
- import org.apache.commons.dbutils.QueryRunner;
- import org.apache.commons.dbutils.handlers.ArrayHandler;
- import org.apache.commons.dbutils.handlers.ArrayListHandler;
- import org.apache.commons.dbutils.handlers.BeanHandler;
- import org.apache.commons.dbutils.handlers.BeanListHandler;
- import org.apache.commons.dbutils.handlers.ColumnListHandler;
- import org.apache.commons.dbutils.handlers.KeyedHandler;
- import org.apache.commons.dbutils.handlers.MapHandler;
- import org.apache.commons.dbutils.handlers.MapListHandler;
- import org.apache.commons.dbutils.handlers.ScalarHandler;
- import guestbook.po.Guestbook;
-
- public class TestDbutils {
- @SuppressWarnings("unchecked")
- public static void main(String[] args) throws ClassNotFoundException {
- Guestbook guestb=null;
- Connection conn=null;
- String jdbcURL = "jdbc:mysql://localhost:3306/mysql_guestbook";
- String jdbcDriver = "com.mysql.jdbc.Driver";
- try {
- DbUtils.loadDriver(jdbcDriver);
- conn = DriverManager.getConnection(jdbcURL, "root", "8345660");
- conn.setAutoCommit(false);//关闭自动提交
-
- QueryRunner qRunner = new QueryRunner();
-
- // 以下部分代码采用MapHandler存储方式查询(查一条记录)
- System.out.println("***Using MapHandler***");
- Map map =(Map)qRunner.query(conn, "select * from guestbook where id = ?", new MapHandler(), new Object[]{1});
- System.out.println("id ------------- name------------- title");
- System.out.println(map.get("id")+" -------------"+map.get("name")+"-------------"+map.get("title"));
- System.out.println();
- // 以下部分代码采用MapListHandler存储方式查询(查一个表中所有记录)
- System.out.println("***Using MapListHandler***");
- List lMap = (List) qRunner.query(conn, "select * from guestbook", new MapListHandler());
-
- System.out.println("id ------------- name------------- title");
- for (int i = 0; i < lMap.size(); i++) {
- Map vals = (Map) lMap.get(i);
- System.out.println(vals.get("id") + " ------------- " + vals.get("name")+"-------------"+vals.get("title"));
- }
- System.out.println();
- // 以下部分代码采用BeanHandler存储方式查询 (查一条记录)
- System.out.println("***Using BeanHandler***");
- guestb = (Guestbook) qRunner.query(conn,"select * from guestbook where id = ?",
- new BeanHandler(Guestbook.class), new Object[] {1});
- System.out.println("id ------------- name------------- title");
- System.out.println(guestb.getId() + " ------------- "+guestb.getName()+"-------------"+guestb.getTitle());
- System.out.println();
- // 以下部分代码采用BeanListHandler存储方式查询 (查一个表中所有记录)
- System.out.println("***Using BeanListHandler***");
- List lBean = (List) qRunner.query(conn, "select * from guestbook", new BeanListHandler(Guestbook.class));
- System.out.println("id ------------- name------------- title");
- for (int i = 0; i < lBean.size(); i++) {
- guestb = (Guestbook) lBean.get(i);
- System.out.println(guestb.getId() + " ------------- "+guestb.getName()+"-------------"+guestb.getTitle());
- }
- System.out.println();
- // 以下部分代码采用ArrayHandler存储方式查询 (查一条记录)
- System.out.println("***Using ArrayHandler***");
- Object[] array = (Object[]) qRunner.query(conn, "select id,name,title from guestbook where id = ?",
- new ArrayHandler(), new Object[] {1});
-
- System.out.println("id ------------- name------------- title");
- System.out.println(array[0].toString() + " ------------- " +array[1]+ "-------------"+array[2].toString());
- System.out.println();
- // 以下部分代码采用ArrayListHandler存储方式查询 (查一个表中所有记录)
- System.out.println("***Using ArrayListHandler***");
- List lArray = (List) qRunner.query(conn, "select id,name,title from guestbook", new ArrayListHandler());
- System.out.println("id ------------- name------------- title");
- for (int i = 0; i < lArray.size(); i++) {
- Object[] var = (Object[]) lArray.get(i);
- System.out.println(var[0].toString() + " ------------- " + var[1].toString()+"------------- " +var[2]);
- }
- System.out.println();
- // 以下部分代码采用ColumnListHandler存储方式查询指定列
- System.out.println("***Using ColumnListHandler***");
- List lName = (List) qRunner.query(conn, "select * from guestbook", new ColumnListHandler("name"));
- System.out.println("name ");
- for (int i = 0; i < lName.size(); i++) {
- String name = (String) lName.get(i);
- System.out.println(name);
- }
- System.out.println();
- // 以下部分代码采用ScalarHandler存储方式查询
- System.out.println("***Using ScalarHandler***");
- String name = (String) qRunner.query(conn, "select * from guestbook where id = ?",
- new ScalarHandler("name"), new Object[] {1});
-
- System.out.println("name ");
- System.out.println(name);
- System.out.println();
-
- // 以下部分代码采用KeyedHandler存储方式查询
- System.out.println("***Using KeyedHandler***");
- //将结果集中的每一行数据都封装一个map中,再将这些map存到一个map中,其key是列名
- Map< Integer,Map< String,Object>> map1 =
- (Map) qRunner.query(conn,"select * from guestbook",new KeyedHandler("id"));
- Set< Entry< Integer, Map< String, Object>>> set=map1.entrySet();
- for(Map.Entry< Integer,Map< String,Object>> entry:set){
- Set< Entry< String, Object>> innerset=entry.getValue().entrySet();
- for(Map.Entry< String,Object>innerse:innerset){
- System.out.println(innerse.getKey()+"="+innerse.getValue());
- }
- }
- System.out.println();
-
-
- // 以下部分代码插入一条数据
- System.out.println("***Insert begin***");
-
- qRunner.update(conn, "insert into guestbook(name,title,content,time,phone,email) values(?,?,?,?,?,?)",
- new Object[] {"王五","学习Dbutils","网上找找","2012-07-08","22605512","zzer@sina.com"});
-
- System.out.println("***update end***");
-
- System.out.println();
- // 以下部分代码更新一条数据
- System.out.println("***update begin***");
-
- qRunner.update(conn, "update guestbook set name = ?,title=? where id = ?",
- new Object[] {"www.java3z.com","java jsp",4});
- System.out.println("***update end***");
-
- System.out.println();
- // 以下部分代码删除一条数据
- System.out.println("***delete begin***");
- qRunner.update(conn, "delete from guestbook where id = ?", new Object[] {2});
- System.out.println("***delete end***");
- DbUtils.commitAndCloseQuietly(conn);
- } catch (SQLException ex) {
- ex.printStackTrace();
- try {
- System.out.println("***rollback begin***");
- DbUtils.rollback(conn);
- System.out.println("***rollback end***");
- } catch (SQLException e) {
- e.printStackTrace();
- }
- } finally {
- DbUtils.closeQuietly(conn);
- }
-
- }
- }
-
-
-
-
复制代码
源码下载:http://file.javaxxz.com/2014/10/11/020432546.zip |
|