日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DBUtil 的使用

發布時間:2023/12/9 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.直接使用框架已經寫好的實現類

  • 查詢單個對象:
//創建 QueryRunner 對象QueryRunner queryRunner = new QueryRunner(new ComboPooledDataSource());//查詢單個對象Account account = queryRunner.query("select * from account where id = ?", new BeanHandler<Account>(Account.class), 8);
  • 查詢多個對象:
QueryRunner queryRunner = new QueryRunner(new ComboPooledDataSource());List<Account> list = queryRunner.query("select * from account ",new BeanListHandler<Account>(Account.class));

四、ResultSetHandler 常用的實現類

  • BeanHandler,:查詢到的單個數據封裝成一個對象
  • BeanListHandler:查詢到的多個數據封裝 成一個List<對象>
  • ArrayHandler,:查詢到的單個數據封裝成一個數組
  • ArrayListHandler:查詢到的多個數據封裝成一個集合 ,集合里面的元素是數組。
  • MapHandler:查詢到的單個數據封裝成一個map
  • MapListHandler:查詢到的多個數據封裝成一個集合 ,集合里面的元素是map。

五、編寫自己的DBUtil(DBUtil的內部實現原理)

1.通用的增刪改方法

  • 以參數個數為主:
//通用的增刪改功能/*** 以參數個數為準* @param sql 需要操作的sql語句* @param args 可變參數, 有幾個占位符,就寫幾個參數進來。*/public void update(String sql ,Object ... args) {Connection conn = null;PreparedStatement ps=null;try {conn = JDBCUtil.getConn();ps = conn.prepareStatement(sql);for (int i = 0; i < args.length; i++) {//因為不知道是什么類型的數據,所以都使用setObject來對待。ps.setObject(i+1, args[i]);}ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();}finally {JDBCUtil.release(conn, ps);}}
  • 以 ?個數為主:

為了防止 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 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。