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;
}
}