數據庫鏈接池的使用,一方面解決了數據庫訪問過多時造成數據庫承受的壓力,另一方面也簡化了數據查詢,今天就
DBUtils包所提供的QueryRunner類(org.apache.commons.dbutils.QueryRunner)作出說明:
-
簡化SQL查詢
-
與ResultSetHandler協同工作將使編碼量大為減少。
- 常見方法
-
query(String sql, Object[] params, ResultSetHandler rsh); query(String sql, Object params, ResultSetHandler rsh):方法本身不提供數據庫連接,執行選擇查詢,在查詢中,對象陣列的值被用來作為查詢的置換參數。
- update(String sql, Object params):update(String sql, Object params[]):執行插入、更新或刪除(DML)操作。
- query(String sql, ResultSetHandler rsh):執行無需參數的選擇查詢。
統一說明,Object[] params接受的是一個參數數組,Object params接收的是單個參數
- 先看常見工具類的編寫:----------------這里就c3p0數據庫連接池查詢作出例子
public class JdbcUtils { private static DataSource ds; static{ ds = new ComboPooledDataSource(); } public static DataSource getDataSource(){ return ds; } }
- 就兩個參數查詢作為參考:
- 補充:
- 實體Users-------id--- username----- password(三個封裝對象)
- 實體QueryResult-------list集合------totalrecord整型
- 目標====從數據庫中獲得所有的user信息,totalrecord是總記錄數記錄user的總數
//獲取到頁面數據和頁面大小 public QueryResult pageQuery(int startindex,int pagesize){ try { QueryRunner runner=new QueryRunner(JdbcUtils.getDataSource()); QueryResult qr = new QueryResult(); String sql="select * from pagination limit ?,?"; Object params[]={startindex,pagesize}; List list= (List) runner.query(sql, params, new BeanListHandler(Users.class)); qr.setList(list); sql = "select count(*) from pagination"; int totalrecord= 0; runner.update(sql, params) totalrecord= ((Long) runner.query(sql, new ScalarHandler())).intValue(); qr.setTotalrecord(totalrecord); return qr; } catch (Exception e) { throw new RuntimeException(e); } }
代碼分析:
List list= (List) runner.query(sql, params, new BeanListHandler(Users.class));
params是一個參數數組,里面是數據庫查詢需要的兩個參數
new BeanListHandler(Users.class)得到list集合 同時將數組封裝到users這個實體中,簡化操作油然而現
totalrecord= ((Long) runner.query(sql, new ScalarHandler())).intValue();
這個是無需參數的查詢,得帶一個值,那就是數據庫總共多條記錄
關鍵:((Long) runner.query(sql, new ScalarHandler())).intValue()
runner.query(sql, new ScalarHandler())得到的值並不能直接強轉為integer類型,但是接受端參數是整數類型,因此先將值轉為long,然后整體調用intValue()方法得到整型
ps:今晚就到這,后續繼續學習新的方法。