在会议上谈论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提交问题,以使其成为潜在的错误模式 。
翻译自: https://www.javacodegeeks.com/2014/02/jdbc-4-0s-lesser-known-clob-free-and-blob-free-methods.html