gpt4 book ai didi

java - 为什么 Clob 的创建与 Connection 类相关联?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:46:00 26 4
gpt4 key购买 nike

我有一个 Java 方法,它使用 JDBC 将 CLOB 传递给 PL/SQL 过程。我能够使用 Connection 类的 createClob() 方法来做到这一点。

这是 Java Doc for the Connection class .如果你注意到除了 createClob() 方法还有 createBlob() , createArrayOf() , createNClob() 此类中的方法。

我很好奇为什么 BlobClobNClob 实例的创建是 Connection 的一部分类(class) ?好像有点格格不入。为什么数据类型及其创建应与连接对象相关联?

为什么我们不能独立地创建这些数据类型的实例?我计划在 SOAP Web 服务中使用以下签名公开此方法:

public String handleEmployeeReview(int empId , String fileName)

Web 服务客户端首先必须创建一个Connection 实例以创建一个Clob 实例,这似乎并不奇怪。 (除非有另一种我不知道的创建和传递 Clob 的方法。)

这也让我想知道我为这个方法选择的 Clob 数据类型是否正确。考虑到它在 Web 服务中公开。

最佳答案

JDBC 被设计为独立于数据库引擎。数据库类型 INTVARCHARTIMESTAMP 等,可以在 Java 类型中有更常见的实现:intString、从 java.util.Date 扩展而来的 java.sql.Timestamp,等等。

BLOBCLOBNLOB 等数据类型是更具体的字段,可以在数据库引擎中以非常不同的方式实现,一些数据库引擎不甚至支持数组作为表列的数据类型,但 JDBC 仍应提供一个透明的接口(interface)来与客户端代码和数据库引擎进行通信。 JDBC 接口(interface)的设计者认为这些对象的创建应该取决于 JDBC 实现(即 CLOB 对象是特定于数据库引擎的),并且提供 创建的最佳位置CLOB 对象(和类似对象)将由 java.sql.Connection 接口(interface)提供,因为您至少需要打开一个物理数据库连接来创建此类特定数据库引擎对象的实例. IMO 这是执行此操作的正确接口(interface),因为它允许在不同的 PreparedStatementCallableStatement 中毫无问题地使用相同的 CLOB 对象。

Connection#createClob的用法方法和类似方法只能由您的 Dao 层使用。其他数据源可能使用不同的方法来存储文件的二进制数据,例如存储在内存中的直接 byte[],对于这种情况,数据源将是缓存系统,而不是直接数据库。

关于java - 为什么 Clob 的创建与 Connection 类相关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27303516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com