JDBC 使用common-dbutiles

一:第三方jar mysql-connector-java-5.1.45-bin.jar,需要关注的核心类:

1、DbUtils----操作数据库的连接注册和释放。

2:、QueryRunner---对数据库进行操作的类,比如增删改查等。

3、ResultSetHandler--- 对查询结果集的处理的核心类。

代码:

 package mysql_comm_demo;

 import Jdbc_Test.jdbcutils;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner; import java.sql.Connection;
import java.sql.SQLException; public class comm_test { public static void main(String ...args)throws SQLException{
db_Test.con_mysql();
}
}
class db_Test{
private static final Connection con= jdbcutils.getCon();
static void con_mysql() throws SQLException{
/*
用QueryRunner来进行操作数据库。sql用字符串占位符,在使用调用queryrunner的update(Connection con,String sql,Object ...para)
根据动态传入的para 替换sql中占位符,其中para可以是数组进行操作。
*/
QueryRunner op_my=new QueryRunner();
String sql="insert into system_user (nid,username,password) values(?,?,?)";
Object[] info={,"oop",""};
int row=op_my.update(con,sql,info);
DbUtils.closeQuietly(con);
/*
通过判断row的大小,来判断执行是否成功。
*/
if(row>){
System.out.print(String.format("执行信息如下:%s","执行成功!" ));
}
} }

二:结果集处理:

ResultSetHandler:

四种方法:1、ArrayHandler:获取查询的结果第一个结果。

2、ArrayListHandler:获取查询结果所有结果的数组的list集合。

3、BeanHandler:获取查询结果的中的第一个javabean的对象。

4、BeanListHandler:获取查询结果的所有的javabean的集合。

     5、MapHandler:获取查询第一个结果,并是Map类型,Map<String,Object>因为列名称的类型是String而列的具体类型未知。

6、MapListHandler:获取查询的结果集,是一个List集合,集合的类型为:Map<String,Object>

其中方法2和4是比较重要。

javabean:

是一个java特有的数据类型,把数据封装成对象,需要有以下特点:

1、要有空参数的构造方法。

2、要有getXxx和setXxxx方法。

 package mysql_comm_demo;

 public class Sys_User {
/*
javabean:
1、需要有空参数的构造器。
2、有getxxx和setxx方法。
*/
public Sys_User(){};
private int nid;
private String username;
private String password;
/*
需要注意的时候get或者set 后面的字段首字母大写。
*/
public int getNid(){
return this.nid;
}
public int setNid(int nid){
this.nid=nid;
return this.nid;
}
public String getUsername(){
return this.username;
}
public void setUsername(String user){
this.username=user;
}
public String getPassword(){
return this.password;
}
public void setPassword(String password){
this.password=password;
} @Override
public String toString() {
return this.nid+" "+this.username+" "+this.password;
}
}
 package mysql_comm_demo;

 import Jdbc_Test.*;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.*; import java.sql.Array;
import java.sql.Connection; import java.sql.SQLException;
import java.util.Collection;
import java.util.List;
import java.util.Map; public class comm_Res {
public static void main(String ... args)throws SQLException{
//select_My.ex_Han();
//select_My.ex_Arlist();
//select_My.ex_Beahan();
//select_My.ex_Bean_List();
//select_My.co_List();
//select_My.sca_H();
select_My.m_H();
//select_My.m_Lh();
}
} class select_My{
private static final Connection con=jdbcutils.getCon();
private static final String sql="SELECT * FROM system_user ";
static void ex_Han()throws SQLException{
QueryRunner qr=new QueryRunner();
/*
通过queryrunner调用query方法,对数据库进行查询。
<T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)
该方法返回是泛型。类型不确定由处理结果集ResultSetHandler<T>来确定该方法返回的类型。
ResultSetHandler<T>是接口,改参数传递是实现该接口的实现类。ArrayHandler或者ArrayHandelerList等。
String sql:查询的sql语句用? 占位。
Object... params:sql语句的替代参数。
ArrayHandler:单个数组集。
ArrayHandelerList:是数组级套数组集。 第一种方法:
ArrayHandler 方法返回查询结果的第一个列的数组对象。无论你查询多少个结果,只返回第一个结果。
ResultSetHandler implementation that converts a ResultSet into an Object[]. This class is thread safe.
数据格式:['root',123]
*/
ArrayHandler ah=new ArrayHandler();
Object[] obj=qr.query(con,sql,ah);
for(Object i:obj){
System.out.print(i);
}
}
static void ex_Arlist()throws SQLException{
/*
第二种: ArrayListHandler
返回查询结果的数组集的List集合
数据形式:[Objects[]]
*/
QueryRunner qr=new QueryRunner();//执行数据平台。
ArrayListHandler arl =new ArrayListHandler();
List<Object[]> res=qr.query(con,sql,arl);
if(res.size()!=){
for(Object[] obj:res){
for (Object i:obj){
System.out.print(i+"\t");
}
System.out.print("\n");
}
} }
static void ex_Beahan()throws SQLException{
/*
第三种方法是:JAVABEAN
返回查询结果的第一行的数据的javabean对象。
构造方法:
BeanHandler(Class<? extends T> type)
参数:传入具有JAVABEAN的特点的class文件。
参数格式:classname.class
返回类型为:classname
*/
QueryRunner qr=new QueryRunner();
BeanHandler<Sys_User> beh=new BeanHandler<>(Sys_User.class);//注意beanhandler是泛型类Class BeanHandler<T>
Sys_User sys=qr.query(con,sql,beh);
System.out.print(sys);
}
static void ex_Bean_List() throws SQLException{
/*
第三种方法:Class BeanListHandler<T>
ResultSetHandler implementation that converts a ResultSet into a List of beans. This class is thread safe.
参数和上面一致。
返回值:List集合的classname object集合。
*/
QueryRunner qr=new QueryRunner();
BeanListHandler<Sys_User> bl=new BeanListHandler<>(Sys_User.class);
List<Sys_User> sys=qr.query(con,sql,bl);
for(Sys_User s:sys){
System.out.println(s);
}
}
static void co_List() throws SQLException{
/*
方法:ColumnListHandler 指定返回指定列的值。
构造器:分无参数和有参数
无参数:默认返回的是第一列的值。
有参数:可以指定传入列的名字(字符串),指定返回列的值,由于不确定类型,所以在返回结果的时候,
使用List<Object>形式。
*/
ColumnListHandler<Object[]> col=new ColumnListHandler<>("username");
QueryRunner qr=new QueryRunner();
List<Object[]> qr_obj=qr.query(con,sql,col);
System.out.print(qr_obj);
}
static void sca_H()throws SQLException{
/*
方法:ScalarHandler
该方法返回单一数据。所以在查询单一数据的时候可以用这个。比如说查执行语句的条数。
空参构造方法。
如果清楚返回类型可以进行指定。
参数构造方法也可以指定列的名字,需要字符串。返回只是一个数据而不是一个集合。
ResultSetHandler implementation that converts one ResultSet column into an Object. This class is thread safe.
*/
String sql="select count(*) from system_user";
ScalarHandler<Object> sc=new ScalarHandler<>();
QueryRunner qr=new QueryRunner();
Object obj=qr.query(con,sql,sc);
System.out.print(obj);
}
static void m_H()throws SQLException{
/*
方法:MapHandler 返回的是单个map类型,只返回当前结果的第一个。
          ResultSetHandler implementation that converts a ResultSet into a List of Maps. This class is thread safe.
注意返回的类型是:Map<String,Object> 因为key是列的名字。
而列的类型不确定所以是Object
*/
MapHandler mh=new MapHandler();
QueryRunner qr=new QueryRunner();
Map<String,Object> ma=qr.query(con,sql,mh);
System.out.print(ma.values());
System.out.print(ma.keySet());
}
static void m_Lh()throws SQLException{
/*
方法:MapHandler 返回的是单个map类型,返回的是所有的列(map)的List集合。
ResultSetHandler implementation that converts a ResultSet into a List of Maps. This class is thread safe.
注意返回的类型是:Map<String,Object> 因为key是列的名字。
而列的类型不确定所以是Object
*/
MapListHandler ml=new MapListHandler();
QueryRunner qr=new QueryRunner();
List<Map<String,Object>> rest=qr.query(con,sql,ml);
for(Map<String,Object> obj:rest){
Collection<Object> val=obj.values();
for(Object a: val){
System.out.print(a+"\t");
}
System.out.print("\n");
}
}
}

Jdbcutils工具类:

 package Jdbc_Test;

 import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties; public class jdbcutils {
private jdbcutils(){};
private static Connection con;
public static void main(String[] args)throws IOException{ }
public static Connection getCon(){
/*
通过读取properites配置文件来获取数据库连接信息。
通过类加载器,读取当前父目录的配置文件。通过class.getClassLoader方法getResourceAstream获取配置文件的
内容,然后通过IO流处理properites文件获取对应的key值。
配置文件便于灵活配置数据库信息。
*/
InputStream inp=jdbcutils.class.getClassLoader().getResourceAsStream("database.properties");
Properties pro=new Properties();
try {
pro.load(inp);
}catch (Exception ex){
throw new RuntimeException(ex+"读取配置文件失败!");
}
try {
String Drverclass = pro.getProperty("Driver.class");
String url = pro.getProperty("Url");
String username = pro.getProperty("username");
String password = pro.getProperty("password");
Class.forName(Drverclass);
con = DriverManager.getConnection(url, username, password);
}catch (Exception ex){
throw new RuntimeException(ex+"数据库连接失败!");
}
return con;
}
public static void cls_re(Connection con, Statement sta, ResultSet re){
if(con!=null){
try{
con.close();
}catch (Exception ex){}
}
if(sta!=null){
try{
sta.close();
}catch (Exception ex){}
}
if(re!=null){
try{
re.close();
}catch (Exception ex){}
} }
public static void cls_re(Connection con, Statement sta){
if(con!=null){
try{
con.close();
}catch (Exception ex){}
}
if(sta!=null){
try{
sta.close();
}catch (Exception ex){}
} }
}
上一篇:ZOJ 1403&&HDU 1015 Safecracker【暴力】


下一篇:HDU 1232 畅通工程(模板——并查集)