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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

我们正在破解JDBC,因此您不必

發布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我们正在破解JDBC,因此您不必 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們喜歡使用JDBC

沒人說。 曾經

更嚴重的是,如果考慮一下,JDBC實際上是一個非常出色的API。 這也可能是Java成為當今流行平臺的原因之一 。 在JDK 1.1 之前 , 以及在ODBC之前 (這已經很久了),很難想象有任何平臺可以完全標準化數據庫訪問。 哎呀, SQL本身在當時甚至還沒有標準化,并且Java隨JDBC一起出現了,JDBC是一個簡單的API,在日常工作中您只需要了解幾項內容:

  • Connection :建模所有數據庫交互的對象
  • PreparedStatement :使您可以執行語句的對象
  • ResultSet :使您可以從數據庫中獲取數據的對象

而已!

回到現實

那是理論。 實際上,在JDBC之上運行的企業軟件Swift發展為:

入侵JDBC。 圖片版權信息 這一頁

JDBC是Java開發人員的不得已的手段之一,在Java開發人員中,JDBC可以感覺像是真正的黑客,可以通過許多方式來入侵這種非常有狀態,非常冗長,非常神秘的API。 幾乎每個使用JDBC進行操作的人都將圍繞API實現包裝器,以至少防止:

  • 常見語法錯誤
  • 綁定變量索引不匹配
  • 動態SQL構造
  • 使用LOB周圍的邊緣情況
  • 資源處理和關閉
  • 陣列和UDT管理
  • 存儲過程抽象

……等等。

因此,當每個人都在執行上述基礎結構工作時,他們并未在處理其業務邏輯。 在使用JDBC時,幾乎每個人都會做這些事情。 Hibernate和JPA幾乎沒有這些問題,但是它們也不再是SQL API。

這是我們已經在jOOQ內部解決的幾個示例,因此您不必:

如何在

case DERBY: case H2: case MARIADB: case MYSQL: {try {listener.executeStart(ctx);result = ctx.statement().executeUpdate();ctx.rows(result);listener.executeEnd(ctx);}// Yes. Not all warnings may have been consumed yetfinally {consumeWarnings(ctx, listener);}// Yep. Should be as simple as this. But it isn't.rs = ctx.statement().getGeneratedKeys();try {List<Object> list = new ArrayList<Object>();// Some JDBC drivers seem to illegally return null// from getGeneratedKeys() sometimesif (rs != null) {while (rs.next()) {list.add(rs.getObject(1));}}// Because most JDBC drivers cannot fetch all// columns, only identity columnsselectReturning(ctx.configuration(), list.toArray());return result;}finally {JDBCUtils.safeClose(rs);} }

如何處理BigInteger和BigDecimal

else if (type == BigInteger.class) {// The SQLite JDBC driver doesn't support BigDecimalsif (ctx.configuration().dialect() == SQLDialect.SQLITE) {return Convert.convert(rs.getString(index),(Class) BigInteger.class);}else {BigDecimal result = rs.getBigDecimal(index);return (T) (result == null ? null :result.toBigInteger());} } else if (type == BigDecimal.class) {// The SQLite JDBC driver doesn't support BigDecimalsif (ctx.configuration().dialect() == SQLDialect.SQLITE) {return Convert.convert(rs.getString(index),(Class) BigDecimal.class);}else {return (T) rs.getBigDecimal(index);} }

如何從SQL Server提取

switch (configuration.dialect().family()) {case SQLSERVER:consumeLoop: for (;;)try {if (!stmt.getMoreResults() &&stmt.getUpdateCount() == -1)break consumeLoop;}catch (SQLException e) {previous.setNextException(e);previous = e;} }

說服了嗎

這是令人討厭的代碼。 我們在這里或在源代碼中有更多討厭的代碼示例 。

所有這些例子表明,使用JDBC時,你會寫代碼,你不希望/不應該在你的應用程序寫入。 這就是為什么…

我們一直在入侵JDBC,因此您不必

翻譯自: https://www.javacodegeeks.com/2014/04/were-hacking-jdbc-so-you-dont-have-to.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的我们正在破解JDBC,因此您不必的全部內容,希望文章能夠幫你解決所遇到的問題。

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