jOOQ 和 JDBC 之间的比较
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
与 JDBC 的相似之处
即使有 两种通用的 Query 类型,JDBC 和 jOOQ 之间仍然有很多相似之处。仅举几例
- 两种 API 都返回非结果查询中受影响的记录数。JDBC:
Statement.executeUpdate()
,jOOQ:Query.execute()
- 两种 API 都从结果查询返回一个可滚动的结果集类型。JDBC:
java.sql.ResultSet
,jOOQ:org.jooq.Result
与 JDBC 的区别
以下列出 JDBC 和 jOOQ 之间一些最重要的区别
- Query vs. ResultQuery:JDBC 没有正式区分可以返回结果的查询和不能返回结果的查询。两者使用相同的 API。这大大降低了 获取便捷方法 的可能性
-
异常处理:虽然 SQL 使用检查型
java.sql.SQLException
,但 jOOQ 将所有异常都包装在未经检查的org.jooq.exception.DataAccessException
中 -
org.jooq.Result
:与 JDBC 对应类型不同,此类型实现了java.util.List
并完全加载到 Java 内存中,从而尽可能早地释放资源。就像语句一样,这意味着用户不必处理“奇怪”的内部结果集状态。 -
org.jooq.Cursor
:如果你想更精细地控制一次性获取到内存中的记录数,你仍然可以使用 jOOQ 的 延迟获取 功能 - 语句类型:jOOQ 没有正式区分静态语句和预处理语句。默认情况下,所有语句在 jOOQ 中都是预处理语句(在内部)。将语句作为静态语句执行只需使用 自定义设置标志
- 关闭语句:即使 JDBC 资源已被使用,JDBC 仍然会保持打开状态。使用 JDBC,安全地关闭资源有很多冗余操作。在 jOOQ 中,资源在消费后默认关闭。如果你想在消费后保持打开状态,你必须明确说明。
- JDBC 标志:JDBC 执行标志和模式不会被修改。可以在 Query 上流畅地设置它们
- 基于零的 API vs 基于一的 API:JDBC 是基于一的 API,jOOQ 是基于零的 API。虽然这在直觉上是有意义的(从 Java 的角度来看,JDBC 是不太直观的 API),但在某些情况下可能会导致混淆。
反馈
你对此页面有任何反馈吗? 我们很乐意听到你的意见!