在会议上谈论jOOQ时,我总是展示此幻灯片,其中包含许多人们经常犯的非常常见的JDBC错误:

此图中的六个常见的JDBC错误

您可以找到错误吗? 其中一些是显而易见的,例如:

  • 第4行:由于第3行的连接不正确而导致的语法错误
  • 第7行:由于变量内联导致的语法错误和SQL注入风险
  • 第8行:由于第3行潜在的不匹配而导致的绑定索引错误
  • 第14行:由于草率的重命名而导致了错误的列名
  • 第18行:不良的资源管理

但是,还有另一个非常细微的错误,大多数人没有意识到,因为该修复仅在Java 6 / JDBC 4.0升级之后才可能进行。 请参阅下面的解决方案:

解决前六个错误

  • 第15行:不调用Clob.free()

在JDBC 4.0中, Clob.free()Clob.free()Blob.free()方法。 尽管调用它们是可选的,但最好不要尽早调用它们,因为您不应该依赖垃圾收集器来尽早释放这些资源,这可能是一个非常糟糕的主意。 实际上,在某些数据库/ JDBC驱动程序中,LOB可能会超出单个语句和/或事务的寿命。 他们是自己的野兽。 如果您正在阅读JDBC教程 (以及JDBC规范中的内容 ),则会显示:

Blob,Clob和NClob Java对象至少在创建它们的事务期间保持有效。 在长时间运行的事务中,这可能导致应用程序资源不足。

对于数组也是如此,自Java 6 / JDBC 4.0开始,数组也具有Array.free()方法。

因此,如果您的应用程序具有长期运行的事务,请调用这些free()方法,或者养成始终调用它们的习惯。 我们将向FindBugs提交问题,以使其成为潜在的错误模式 。

参考: JDBC 4.0的鲜为人知的Clob.free()和Blob.free()方法(来自JAVA,SQL和JOOQ博客的JCG合作伙伴 Lukas Eder)。

翻译自: https://www.javacodegeeks.com/2014/02/jdbc-4-0s-lesser-known-clob-free-and-blob-free-methods.html

JDBC 4.0鲜为人知的Clob.free()和Blob.free()方法相关推荐

  1. JDBC 2.0中的高级数据类型

    JDBC 2.0中提供了对SQL3标准中引入的新的数据类型,如Blob(binary large object).Clob(character large object).Array 对象.REF(对 ...

  2. Java SE 6 新特性: Java DB 和 JDBC 4.0

    http://www.ibm.com/developerworks/cn/java/j-lo-jse65/index.html 长久以来,由于大量(甚至几乎所有)的 Java 应用都依赖于数据库,如何 ...

  3. java sql2016驱动_微软发布用于SQL Server 的JDBC 6.0驱动下载 - IT之家

    IT之家讯 微软发布了用于SQL Server数据库的JDBC 6.0驱动下载,该版本为基于Java的SQL Server和Azure SQL数据库提供强大的数据访问性能,相关用户可下载安装(仅英文版 ...

  4. clob类型用java怎么存,Java 储存和读取 oracle CLOB 类型字段的实用方法

    当前位置:我的异常网» 编程 » Java 储存和读取 oracle CLOB 类型字段的实用方法 Java 储存和读取 oracle CLOB 类型字段的实用方法 www.myexceptions. ...

  5. JDBC详解(四):操作BLOB类型字段(超详解)

    JDBC详解(四):操作BLOB类型字段 前言 一.MySQL BLOB类型 二.向数据表中插入大数据类型 三.修改数据表中的Blob类型字段 四.从数据表中读取大数据类型 前言 本博主将用CSDN记 ...

  6. android添加截图功能,Android应用开发之Android 5.0及以上编程实现屏幕截图功能的方法...

    本文将带你了解Android应用开发Android 5.0及以上编程实现屏幕截图功能的方法,希望本文对大家学Android有所帮助. 本文实例讲述了Android   5.0及以上编程实现屏幕截图功能 ...

  7. weblogic.jdbc.wrapper.Blob_oracle_sql_BLOB cannot be cast to oracle.sql.BLOB 解决方法

    weblogic.jdbc.wrapper.Blob_oracle_sql_BLOB cannot be cast to oracle.sql.BLOB 解决方法 参考文章: (1)weblogic. ...

  8. Redis 5.0.3默认配置启动报错解决方法

    Redis 5.0.3默认配置启动报错解决方法 参考文章: (1)Redis 5.0.3默认配置启动报错解决方法 (2)https://www.cnblogs.com/miclesvic/p/1031 ...

  9. Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程)

    Android studio3.0打开Device File Explore(文件管理器)的方法 看到网上AS3.0新增加的查看手机文件的新功能,全部都是转载的,没有几个人心细的把如何打开的方法写下来 ...

最新文章

  1. Softmax回归——logistic回归模型在多分类问题上的推广
  2. Error -26612: HTTP Status-Code=500 (Internal Server Error) ...
  3. java 动态代理 阿bin_Android WebView 的方法只能在 UI 线程中运行
  4. 计算机机房t4,机房等级-T2-T3-T4-如何划分
  5. loop 伪设备 挂在文件系统
  6. Vim winmanager文件浏览自动更新
  7. ctrl c 失效了_[安卓+PC双端]超C女仆无馬中字
  8. 3D游戏建模就是那么简单
  9. 惹恼程序员的10件事
  10. mysql数据库 integer_MySQL数据库中,常用的数据类型
  11. Tosca:键盘输入字符串
  12. 后序遍历二叉树(迭代 vs 递归)
  13. 25. PHP 文件处理
  14. php常量的声明和使用
  15. html5数组循环右移,下面的程序代码实现将一个一维数组中元素向右循环移动 移位次数由文本框Text输入。例如数组各元素...
  16. 3. mysql的注解驱动的三种方式_注册 Jdbc 驱动程序的三种方式及Class.forName 的作用...
  17. CCNA(高级实验)
  18. ubuntu升级显卡驱动
  19. 越来越多的主板增加了WIFI功能,但是你真能用得到吗?
  20. 补遗篇之单行道标志const

热门文章

  1. RPC远程过程调用之Hessian 基于HTTP
  2. mybatis的$和#详解分析
  3. neo4j 显示名字_Neo4j:绘制“我的名字是……我在工作”图
  4. hazelcast_HazelCast的Spring-Boot和Cache抽象
  5. java向后兼容吗_Java向后不兼容历史的观察
  6. jdk8和hotspot_HotSpot的-XshowSettings标志的简单性和价值
  7. wildfly管理控制台_WildFly管理控制台已更新–请求反馈
  8. dbunit使用_摆脱困境:在DbUnit数据集中使用空值
  9. 检查Java测试中发生了什么
  10. 背包问题九讲_背包问题