*建議:與JDBC連接配接資料庫的那一篇一起對照看看差別*
DBUtils工具類
如果隻使用JDBC進行開發,會發現代碼過多,為了簡化JDBC開發,我們采用apache commons元件的一個成員:DBUtils。
DBUtils就是JDBC的簡化開發工具包。
DBUtils封裝了對JDBC的操作,簡化了JDBC操作,可以少寫代碼。
1、QueryRunner 中提供了對sql語句操作的API
2、ResultSetHandler 接口,用于定義select操作後,怎樣封裝結果集。
3、DbUtils 類,它就是一個工具,定義了關閉資源與事務處理的方法。
需導入commons-dbutils-1.6.jar包,導入步驟跟JDBC導包一樣。
定義方法,使用QueryRunner類的方法update向資料表中添加資料
步驟:
- 使用QueryRunner類,實作對資料表的insert,delete,update
- 調用QueryRunner類的方法update(Connection on,String sql,Object…param)
public class QueryRunnerDemo{
private static Connection con=JDBCUtilsConfig.getConnection();
public static void main(String[] args)throws SQLException{
insert();
}
public static void insert()throws SQLException{
QueryRunner qr=new QueryRunner();//建立QueryRunner對象
String sql="INSERT INTO sort(sname,sprice.sdesc) VALUES(?,?,?)";
Object[] params={"體育用品",1000,"購買用品"};//将三個?占位符的實際參數寫在數組中
int row=qr.update(con,sql,params);
System.out.println(row);//執行成功的行數
DbUtils.closeQuietly(con);//關閉資源
}}
定義方法,使用QueryRunner類的方法update将資料表的資料修改
public class QueryRunnerDemo{
private static Connection con=JDBCUtilsConfig.getConnection();
public static void main(String[] args)throws SQLException{
update();
}
public static void update()throws SQLException{
QueryRunner qr=new QueryRunner();//建立QueryRunner對象
String sql="UPDATE sort sname=?,sprice=?,sdesc=? WHERE sid=?";
Object[] params={"花",100,"情人節玫瑰花",4};
int row=qr.update(con,sql,params);
System.out.println(row);//執行成功的行數
DbUtils.closeQuietly(con);//關閉資源
}}
定義方法,使用QueryRunner類的方法delete将資料表的資料删除
public class QueryRunnerDemo{
private static Connection con=JDBCUtilsConfig.getConnection();
public static void main(String[] args)throws SQLException{
delete();
}
public static void delete()throws SQLException{
QueryRunner qr=new QueryRunner();//建立QueryRunner對象
String sql="DELETE FROM sort WHERE sid=?";
int row=qr.update(con,sql,8);//删除第八行
System.out.println(row);//執行成功的行數
DbUtils.closeQuietly(con);//關閉資源
}}
QueryRunner資料查詢操作
- 調用QueryRunner類方法query(Connection con,String sql,ResultSetHandler r,Object…params)
- ResultSetHandler r :結果集的處理方式,傳遞ResultSetHandler接口實作類
- query方法傳回值,傳回的是T泛型,具體傳回值類型,跟随結果集處理方式變化
JavaBean就是一個類,在開發中常用封裝資料
- 提供私用字段:private類型 字段名;
- 提供getter、setter方法
- 提供無參構造
QueryRunner資料查詢
pubic class QueryRunnerDemo{
private static Connection con=JDBCUtilsConfig.getConnection();
public static void main(String [] args){
arrayHandler();
arrayListHandler();
beanHandler();
beanListHandler();
columnListHandler();
scalarHandler();
mapHandler();
mapListHandler();
}
//結果集第一種處理方法,ArrayHandler,将結果集的第一行存儲到對象數組中Object[]
public static void arrayHandler()throws SQLException{
QueryRunner qr=new QueryRunner();
String sql="SELECT * FROM sort";
Object[] result=qr.query(con,sql,new ArrayHandler());//調用query執行查詢,傳遞連接配接對象,SQl語句,結果集處理方式的實作類對象,傳回對象數組
for(Object obj:result){
System.out.print(obj+"\t");
}
}
//結果集第二種處理方式,ArrayListHandler,将結果集的每一行,封裝到對象數組中,出現很多對象數組,對象數組存儲到List集合
public static void arrayListHandler()throws SQLException{
QueryRunner qr=new QueryRunner();
String sql="SELECT * FROM sort";
List<Object[]> result=qr,query(con,sql,new ArrayListHandler());//方法傳回的是每行的對象數組,存儲到List
for(Object[] objs:result){
for(Object obj:objs){//周遊對象數組
System.out.print(obj+"\t");
}
System.out.println();
}
}
//結果集第三種處理方式,BeanHandler,将結果集的第一行資料,封裝到JavaBean對象中,結果集第一行封裝成Sort類對象
public static void beanHandler()throws SQLException{
QueryRunner qr=new QueryRunner();
String sql="SELECT * FROM sort";
Sort s=qr.query(con,sql,new BeanHandler<Sort>(Sort.class));//BeanHandler<T泛型>(Class)
System.out.println(s);//Sort[sid=1,sname=家電,sprice=2000]
}
//結果集第四種處理方式,BeanListHandler,将資料結果集每一行資料封裝成JavaBean對象,多個JavaBean對象封裝到List集合中
public static void beanListHandler()throws SQLException{
QueryRunner qr=new QueryRunner();
String sql="SELECT * FROM sort";
List<Sort> list=qr.query(con,sql,new BeanListHandler<Sort>(Sort.class));
for(Sort s:list){System.out.println(s);}
}
//結果集第五種處理方式,ColumnListHandler,指定列的資料,存儲到List集合
//List<Object>每個列資料類型不同
public static void ColumnListHandler()throws SQLException{
QueryRunner qr=new QueryRunner();
String sql="SELECT * FROM sort";
List<Object> list=qr.query(con,sql,new ColumnListHandler<Object>("sname"));//實作類ColumnListHandler構造方法中,使用字元串的列名
for(Object obj:list){System.out.println(obj);}
}
//結果集第六種處理方式,ScalarHandler,對于查詢後隻有一個結果
public static void scalarHandler()throws SQLException{
QueryRunner qr=new QueryRunner();
String sql="SELECT COUNT(*) FROM sort";
long count=qr.query(con,sql,new ScalarHandler<Long>());
System.out.println(count);
}
//結果集第七種處理方式,MapHandler,将結果集第一行資料封裝到Map集合中
//Map<key,values>
public static void mapHandler()throws SQLException{
QueryRunner qr=new QueryRunner();
String sql="SELECT * FROM sort";
Map<String,Object> map=qr.query(con,sql,new MapHandler());
for(String key:map.keySet()){System.out.println(key+" "+map.get(key));}
}
//結果集第八種處理方式,MapListHandler,将結果集每一行存儲到Map集合,Map集合過多,存儲到List集合,傳回值List集合,存儲的是Map集合
public static void mapListHandler()throws SQLException{
QueryRunner qr=new QueryRunner();
String sql="SELECT * FROM sort";
List<Map<String,Object>> list=qr.query(con,sql,new MapListHandler());
for(Map<String:Object> map:list){
for(String key:map.keySet()){System.out.print(key+" "+map.get(key));}
System.out.println();
}
}
}