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<Object[]>; 封装所有记录为数组,并装到List集合中 (二维) //BeanHandler<T>: 返回JavaBean对象(实体类对象);泛型<T>是JavaBean类; 封装第一条记录为JavaBean对象。 (JavaBean类必须有空参构造器) //BeanListHandler<T>: 返回List<JavaBean类>; 封装所有记录为JavaBean对象,并装到List集合中 //ColumnListHandler<Object>: 返回List<Object>; 封装所有记录指定列的值,并装到List集合中 //ScalarHandler<T>: 返回某列值; 适用于查询结果只有一条的情况(例如SQL中的聚合函数count()等)。泛型<T>是列值的类型。 //MapHandler: 返回Map<String,Object>;Map<键,值> 键:列名 值:列值; 封装第一条记录的所有列到Map集合 //MapListHandler: 返回List<Map<String,Object>>, 封装所有记录的所有列值到List中。Map对应一条记录所有列,List对应所有记录。 } public static void mapListHandler()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort"; //MapListHandler,返回List<Map<String,Object>>, 封装所有记录的所有列值到List中。Map对应一条记录所有列,List对应所有记录。 List<Map<String,Object>> list = qr.query(con, sql, new MapListHandler()); //遍历集合list (遍历所有记录) for( Map<String,Object> 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<String,Object>;Map<键,值> 键:列名 值:列值; 封装第一条记录所有列到Map集合 Map<String,Object> 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<T>,返回某列值; 适用于查询结果只有一条的情况(例如SQL中的聚合函数count(*)) long count = qr.query(con, sql, new ScalarHandler<Long>()); System.out.println(count); DbUtils.closeQuietly(con); // 关闭资源 } public static void columnListHandler()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort "; //ColumnListHandler<Object>,返回List<Object>;将所有记录的某列值添加到List集合中 List<Object> list = qr.query(con, sql, new ColumnListHandler<Object>("列名")); 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<T>,返回List<JavaBean类>; 没有查到结果,size()为0 List<Sort> list = qr.query(con, sql, new BeanListHandler<Sort>(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<T>,返回 JavaBean对象(Sort对象)(实体类对象)。没有查到结果返回null Sort s = qr.query(con, sql, new BeanHandler<Sort>(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<Object[]>; 没有查询到结果,size()为0 List<Object[]> 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; } }