API介绍:
org.apache.commons.dbutils.QueryRunner
org.apache.commons.dbutils.ResultSetHandler
工具类:
org.apache.commons.dbutils.DbUtils
DbUtils:提供如关闭连接、转载JDBC驱动程序等常规工作的工具等,里面的所有方法都是静态的。主要方法如下:
public static void close(…) throws java.sql.SQLException: DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭Connection、Statement和ResultSet。
public static void closeQuietly(…): 这一类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception。
public static void commitAndCloseQuietly(Connection conn): 用来提交连接,然后关闭连接,并且在关闭连接时不抛出SQL异常。
public static boolean loadDriver(java.lang.String driverClassName):这一方装载并注册JDBC驱动程序,如果成功就返回true。使用该方法,你不需要捕捉这个异常ClassNotFoundException。
QueryRunner类:
该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。
QueryRunner类提供了两个构造方法:
默认的构造方法
需要一个 javax.sql.DataSource 来作参数的构造方法。
主要方法:
public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。
public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException: 几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得 Connection。
public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 执行一个不需要置换参数的查询操作。
public int update(Connection conn, String sql, Object[] params) throws SQLException:用来执行一个更新(插入、更新或删除)操作。
public int update(Connection conn, String sql) throws SQLException:用来执行一个不需要置换参数的更新操作。
ResultSetHandler接口:
该接口用于处理java.sql.ResultSet,将数据按要求转化为另一种形式。
ResultSetHandler接口提供了一个单独的方法:Objecthandle(java.sql.ResultSet.rs)
ResultSetHandler 接口的实现类:
ArrayHandler:把结果集中的第一行数据转成对象数组。
ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
ColumnListHandler:将结果集中某一列的数据存放到List中。
KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。
MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
环境搭建:
1、 复制库文件
c3p0的jar及c3p0-config.xml
dbuitls的jar包
mysql驱动包
2、复制并修改DBManager
CRID
插入
public void insert()throws SQLException{ QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource()); String sql = "insert into user(id,name,password,email,birthday) values(null,?,?,?,?)"; Object[] param={"by","sss","by@wer.com","1980-03-04"}; runner.update(sql, param); } |
删除
public void delete()throws SQLException{ QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource()); String sql = "delete from user where name=?"; Object[] param ={"by"}; runner.update(sql, param); } |
查询
public User find() throws SQLException{ QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource()); String sql = "select * from user where id=?";
User u = (User)runner.query(sql,newBeanHandler(User.class),1);
return u; } |
public void getAll()throws SQLException{ QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource()); String sql = "select * from user"; List<User> list = (List<User>) runner.query(sql, newBeanListHandler(User.class)); System.out.println(list.size()); } |
批处理
public void bath() throws SQLException{ QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource()); String sql = "insert into user(id,name,password) values(?,?,?)"; Object[][] params = {{5,"Jake","aaa"},{6,"John","bbb"},{7,"Jansen","ccc"}}; runner.batch(sql, params); } |
ResultSetHandler 接口的实现类
ArrayHandler
public void testArrayHandler()throws SQLException{ QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource()); String sql = "select * from user"; Object[] result = runner.query(sql,new ArrayHandler()); System.out.println(Arrays.asList(result)); } |
ArrayListHandler
public void testArrayListHandler()throws SQLException{ QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource()); String sql = "select * from user"; List<Object[]> result = (List<Object[]>) runner.query(sql, new ArrayListHandler()); for(int i=0; i<result.size(); i++){ System.out.println(Arrays.asList(result.get(i))); } } |
ColumnListHandler
public void testColumnListHandler()throws SQLException{ QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource()); String sql = "select * from user"; List<Object> result = (List<Object>) runner.query(sql, new ColumnListHandler("name")); System.out.println(result); } |
KeyedHandler
public void testKeyedHandler()throws SQLException{ QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource()); String sql = "select * from user"; Map<Integer,Map<String,Object>> map = (Map) runner.query(sql, new KeyedHandler("id")); for(Map.Entry<Integer,Map<String,Object>> me : map.entrySet()){ int id = me.getKey(); Map<String,Object> innermap = me.getValue(); for(Map.Entry<String, Object> innerme: innermap.entrySet()){ String name = innerme.getKey(); Object value = innerme.getValue(); System.out.println(name + "=" + value);
} } } |
MapListHandler
public void testMapListHandler()throws SQLException{ QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource()); String sql = "select * from user"; List<Map<String,Object>> result = (List<Map<String,Object>>) runner.query(sql, new MapListHandler()); for(int i=0; i<result.size(); i++){ Map<String, Object> map = result.get(i);
System.out.println("---------------------");
for(Map.Entry<String, Object> me : map.entrySet() ){ String colName = me.getKey(); Object value = me.getValue();
System.out.println(colName + " = " + value); }
} } |