javaSE 第三方插件commons-dbutils, 操作数据库的工具类, QueryRunner类, (query() 查询操作)

【javaSE 第三方插件commons-dbutils, 操作数据库的工具类, QueryRunner类, (query() 查询操作)】MySql驱动(jar包)下载:https://pan.baidu.com/s/19BYnGbO3l5MOOic5K4Ooaw密码:mwoh
第三方插件(commons-dbutils)下载:https://pan.baidu.com/s/17cyAXHZLgiayx5Y_VHvawQ密码:6om2
commons-dbutils-1.6.jar---右键---Build Path---Add to Build Path


Demo.java:

package cn.xxx.demo; import java.sql.Connection; // MySql驱动中的包 import java.sql.SQLException; // MySql驱动中的包 import java.util.List; import java.util.Map; // 下面的包都是commons-dbutils插件(jar包)中的包 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.MapHandler; import org.apache.commons.dbutils.handlers.MapListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import cn.xxx.domain.Sort; // JavaBean类,实体类,必须有空参的构造器 import cn.xxx.jdbcutil.JDBCUtilsConfig; // 自定义的连接数据库的工具类,用于获取数据库连接对象。/* * QueryRunner数据查询操作: *调用QueryRunner类方法query(Connection con,String sql,ResultSetHandler r, Object..params) *ResultSetHandler r 结果集的处理方式,传递ResultSetHandler接口实现类。不同的实现类,返回不同的'结果集'。 *Object..params 对应SQL语句中的?占位符 *query的返回值由不同的ResultSetHandler实现类决定。 不同的实现类,返回不同的'结果集'。 */ public class Demo { private static Connection con = JDBCUtilsConfig.getConnection(); public static void main(String[] args) throws SQLException{ //ResultSetHandler接口实现类有如下: (根据不同的实现类,返回不同的'结果集') //ArrayHandler: 返回对象数组 Object[]; 封装第一条记录为数组(一维) //ArrayListHandler: 返回List; 封装所有记录为数组,并装到List集合中(二维) //BeanHandler: 返回JavaBean对象(实体类对象); 泛型是JavaBean类; 封装第一条记录为JavaBean对象。 (JavaBean类必须有空参构造器) //BeanListHandler: 返回List; 封装所有记录为JavaBean对象,并装到List集合中 //ColumnListHandler: 返回List; 封装所有记录指定列的值,并装到List集合中 //ScalarHandler: 返回某列值; 适用于查询结果只有一条的情况(例如SQL中的聚合函数count()等)。泛型是列值的类型。 //MapHandler: 返回Map; Map<键,值> 键:列名值:列值; 封装第一条记录的所有列到Map集合 //MapListHandler: 返回List, 封装所有记录的所有列值到List中。Map对应一条记录所有列,List对应所有记录。 }public static void mapListHandler()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT* FROM sort"; //MapListHandler,返回List, 封装所有记录的所有列值到List中。Map对应一条记录所有列,List对应所有记录。 List list = qr.query(con, sql, new MapListHandler()); //遍历集合list (遍历所有记录) for( Map map : list ){ for(String key : map.keySet()){ // 遍历Map (一条记录的所有列) System.out.print(key+"..."+map.get(key)); } System.out.println(); }DbUtils.closeQuietly(con); // 关闭资源}public static void mapHandler()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT* FROM sort"; //MapHandler,返回Map; Map<键,值> 键:列名值:列值; 封装第一条记录所有列到Map集合 Map map = qr.query(con, sql, new MapHandler()); //遍历Map集合 for(String key : map.keySet()){ System.out.println(key+".."+map.get(key)); }DbUtils.closeQuietly(con); // 关闭资源 }public static void scalarHandler()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT COUNT(*) FROM sort"; //ScalarHandler,返回某列值; 适用于查询结果只有一条的情况(例如SQL中的聚合函数count(*)) long count = qr.query(con, sql, new ScalarHandler()); System.out.println(count); DbUtils.closeQuietly(con); // 关闭资源 }public static void columnListHandler()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort "; //ColumnListHandler,返回List; 将所有记录的某列值添加到List集合中 List list = qr.query(con, sql, new ColumnListHandler("列名")); for(Object obj : list){ System.out.println(obj); }DbUtils.closeQuietly(con); // 关闭资源 }public static void beanListHander()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort "; //BeanListHandler,返回List; 没有查到结果,size()为0 List list = qr.query(con, sql, new BeanListHandler(Sort.class)); // Sort类是一个JavaBean类 for(Sort s : list){ System.out.println(s); }DbUtils.closeQuietly(con); // 关闭资源 }public static void beanHandler()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort "; //BeanHandler,返回 JavaBean对象(Sort对象)(实体类对象)。没有查到结果返回null Sort s = qr.query(con, sql, new BeanHandler(Sort.class)); // Sort类是JavaBean类(实体类)(必须有空参构造器)。 System.out.println(s); DbUtils.closeQuietly(con); // 关闭资源 }public static void arrayListHandler()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort"; //ArrayListHandler,返回List; 没有查询到结果,size()为0 List result=qr.query(con, sql, new ArrayListHandler()); //集合的遍历 for( Object[] objs: result){ //遍历对象数组 for(Object obj : objs){ System.out.print(obj+""); } System.out.println(); }DbUtils.closeQuietly(con); // 关闭资源 }public static void arrayHandler()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort"; //调用方法query执行查询 //ArrayHandler,返回对象数组 Object[]; 没有查询到结果,数组长度为0 Object[] result = qr.query(con, sql, new ArrayHandler()); // 后面可以加Object[]表示参数,替换sql中的?占位符 for(Object obj : result){ System.out.print(obj); }DbUtils.closeQuietly(con); // 关闭资源 }}
JDBCUtilsConfig.java(自定义的数据库工具类,用于获取数据库连接对象):
package cn.xxx.jdbcutil; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; public class JDBCUtilsConfig { private static Connection con ; private static String driverClass; private static String url; private static String username; private static String password; static{// 静态代码块,只会被执行一次 try{ readConfig(); Class.forName(driverClass); con = DriverManager.getConnection(url, username, password); }catch(Exception ex){ throw new RuntimeException("数据库连接失败"); } } private static void readConfig()throws Exception{ InputStream in = JDBCUtilsConfig.class.getClassLoader().getResourceAsStream("database.properties"); Properties pro = new Properties(); pro.load(in); driverClass=pro.getProperty("driverClass"); url = pro.getProperty("url"); username = pro.getProperty("username"); password = pro.getProperty("password"); } public static Connection getConnection(){ return con; } }




    推荐阅读