DBUtil 的使用
生活随笔
收集整理的這篇文章主要介紹了
DBUtil 的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
?
一、什么是DBUtil
二、DBUtil的增刪改
三、DBUtil的查詢
1.直接new接口的匿名實現類
2.直接使用框架已經寫好的實現類
四、ResultSetHandler 常用的實現類
五、編寫自己的DBUtil(DBUtil的內部實現原理)
1.通用的增刪改方法
2.通用的查詢方法
一、什么是DBUtil
Commons DBUtils是Apache組織提供的一個對JDBC進行簡單封裝的開源工具類庫,使用它能夠簡化JDBC應用程序的開發,同時也不會影響程序的性能
二、DBUtil的增刪改
Account是一個與數據庫對應的pojo類,有id、name、money三個屬性
@Test public void testInsert() throws SQLException, InstantiationException, IllegalAccessException{//dbutils 只是幫我們簡化了CRUD 的代碼, 但是連接的創建以及獲取工作。 不在他的考慮范圍QueryRunner queryRunner = new QueryRunner(new ComboPooledDataSource());//增加queryRunner.update("insert into account values (null , ? , ? )", "zhaoliu" ,1000);//刪除queryRunner.update("delete from account where id = ?", 5);//更新queryRunner.update("update account set money = ? where id = ?", 2000 , 6); }三、DBUtil的查詢
1.直接new接口的匿名實現類
@Test public void testInsert() throws SQLException, InstantiationException, IllegalAccessException{ //去執行查詢,查詢到的數據還是在result里面。 然后調用下面的handle方法,由用戶手動去封裝。Account account = queryRunner.query("select * from account where id = ?", new ResultSetHandler<Account>(){@Overridepublic Account handle(ResultSet rs) throws SQLException {Account account = new Account();while(rs.next()){account.setName(nrs.getString("name"));account.setMoney(rs.getInt("money"));}return account;}}, 6);System.out.println(account.toString());}2.直接使用框架已經寫好的實現類
- 查詢單個對象:
- 查詢多個對象:
四、ResultSetHandler 常用的實現類
- BeanHandler,:查詢到的單個數據封裝成一個對象
- BeanListHandler:查詢到的多個數據封裝 成一個List<對象>
- ArrayHandler,:查詢到的單個數據封裝成一個數組
- ArrayListHandler:查詢到的多個數據封裝成一個集合 ,集合里面的元素是數組。
- MapHandler:查詢到的單個數據封裝成一個map
- MapListHandler:查詢到的多個數據封裝成一個集合 ,集合里面的元素是map。
五、編寫自己的DBUtil(DBUtil的內部實現原理)
1.通用的增刪改方法
- 以參數個數為主:
- 以 ?個數為主:
為了防止 update("update account set money = ? where id = ?" , 9 ,8,19,10,10,10); 這種情況出現,?個數與可變參數的個數不符,以參數為主可能發生錯誤。
/*** 以 ? 個數為準 防止寫了多余的參數* @param sql 需要操作的sql語句* @param args 可變參數, 有幾個占位符,就寫幾個參數進來。*/public void update02(String sql ,Object ... args) {Connection conn = null;PreparedStatement ps=null;try {conn = JDBCUtil.getConn();ps = conn.prepareStatement(sql);//元數據//獲取到有幾個問號,占位符ParameterMetaData metaData = ps.getParameterMetaData();int count = metaData.getParameterCount();for (int i = 0; i < count; i++) {//因為不知道是什么類型的數據,所以都使用setObject來對待。ps.setObject(i+1, args[i]);}ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();}finally {JDBCUtil.release(conn, ps);}}什么是元數據?
描述數據的數據 String sql , 描述這份sql字符串的數據叫做元數據
- 數據庫元數據 DatabaseMetaData
- 參數元數據 ParameterMetaData
- 結果集元數據 ResultSetMetaData
2.通用的查詢方法
public <T> T query(String sql , ResultSetHandler<T> handler, Object ...args ){Connection conn = null;PreparedStatement ps=null;try {conn = JDBCUtil.getConn();ps = conn.prepareStatement(sql);//獲取到有幾個問號,占位符ParameterMetaData metaData = ps.getParameterMetaData();int count = metaData.getParameterCount();for (int i = 0; i < count; i++) {//因為不知道是什么類型的數據,所以都使用setObject來對待。ps.setObject(i+1, args[i]);}//執行查詢工作, 然后得到結果集ResultSet rs = ps.executeQuery();//把結果集丟給調用者,讓它去封裝數據 ,返回封裝數據T t = (T) handler.handle(rs);return t;} catch (SQLException e) {e.printStackTrace();}finally {JDBCUtil.release(conn, ps);}return null;} public interface ResultSetHandler<T> {/*** 定義了數據封裝的規則。 規范。 * @param <T>* @param rs*/T handle(ResultSet rs);}?
總結
以上是生活随笔為你收集整理的DBUtil 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php基础-1
- 下一篇: 日志处理(二) 日志组件logback