使用 Java 从数据库读取 UDT 的最佳方法是什么?

2024-04-09

我以为我了解有关 UDT 和 JDBC 的一切,直到有人SO http://stackoverflow.com指出了Javadoc的一些细节java.sql.SQLInput http://download.oracle.com/javase/6/docs/api/java/sql/SQLInput.html and java.sql.SQLData http://download.oracle.com/javase/6/docs/api/java/sql/SQLData.htmlJavaDoc 给我。该提示的本质是(来自 SQLInput):

包含流的输入流 代表一个实例的值 SQL 结构化类型或 SQL 独特的类型。这个接口,用到了 仅用于自定义映射,用于 幕后司机和 程序员从不直接调用 SQL 输入方法。

这与我习惯做的事情完全相反(当与 Oracle JDBC 驱动程序一起使用时,它也在生产系统中使用并且稳定):SQLData并在自定义映射中提供此实现

ResultSet.getObject(int index, Map mapping)

然后 JDBC 驱动程序将使用以下方法回调我的自定义类型

SQLData.readSQL(SQLInput stream, String typeName)

方法。我实现了这个方法并读取每个字段SQLInput溪流。到底,getObject()将返回我的正确初始化的实例SQLData实现保存来自 UDT 的所有数据。

对我来说,这似乎是实现此类自定义映射的完美方法。走这条路的充分理由:

  • 我可以使用标准 API,而不是使用特定于供应商的类,例如oracle.sql.STRUCT, etc.
  • 我可以从我的 UDT 生成源代码,并具有适当的 getter/setter 和其他属性

我的问题:

  • 您对我的实施方法有何看法?SQLData?即使 Javadoc 另有说明,它是否可行?
  • 您还知道哪些其他在 Java 中读取 UDT 的方法?例如。 Spring 做什么?休眠是做什么的? JPA 是做什么的?你做什么工作?

Addendum:

UDT支持以及与存储过程的集成是其主要特性之一jOOQ http://www.jooq.org。 jOOQ 的目标是从客户端代码中隐藏更复杂的“JDBC 事实”,而不隐藏底层数据库架构。如果你也有类似上面的问题,jOOQ 或许可以为你提供答案。


配置驱动程序使其在幕后工作的优点是程序员不需要将类型映射传递到 ResultSet.getObject(...) 中,因此需要记住的细节更少(大多数时候)。还可以在运行时使用属性来配置驱动程序来定义映射,因此应用程序代码可以保持独立于 SQL 类型到对象映射的详细信息。如果应用程序可以支持多个不同的数据库,则这允许每个数据库支持不同的映射。

您的方法是可行的,其主要特征是应用程序代码使用显式类型映射。

在幕后方法中,ResultSet.getObject(int) 方法将使用连接上定义的类型映射,而不是 ResultSet.getObject(int index, Map mapping) 中应用程序代码传递的类型映射。否则,方法是相同的。

其他方法

我已经看到基于这些类的 JBoss 4 使用的另一种方法:

org.jboss.ejb.plugins.cmp.jdbc.JDBCParameterSetter 
org.jboss.ejb.plugins.cmp.jdbc.JDBCResultSetReader.AbstractResultSetReader

想法是相同的,但实现是非标准的(它可能早于定义 SQLData/SQLInput 的 JDBC 标准版本)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Java 从数据库读取 UDT 的最佳方法是什么? 的相关文章

  • 使用 Java 的 Apache Http 摘要身份验证

    我目前正在开发一个 Java 项目 但无法使 http 摘要身份验证正常工作 我尝试使用 Apache 网站 但没有帮助 我有一个需要 HTTP 摘要身份验证的网站 DefaultHttpClient httpclient new Defa
  • 使用 Tabula 通过 Python 读取 pdf 时出现 Java 错误

    我已经安装了 tabula 库 用于使用 python 将 pdf 读取到 pandas 数据框中 但是当我运行代码时 import tabula df tabula read pdf sample1 pdf pages 1 我得到了例外
  • 有没有创建 Cron 表达式的 Java 代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要一个 Java 代码来根据用户输入创建一个 cron 表达式 用户输入是时间 频率和执行次数 只需从评论中添加 自己创建 即可
  • Java 的支持向量机?

    我想用Java编写一个 智能监视器 它可以随时发出警报detects即将到来的性能问题 我的 Java 应用程序正在以结构化格式将数据写入日志文件
  • Android studio - 如何保存先前活动中选择的数据

    这是我的代码片段 这Textview充当按钮并具有Onclicklistner在他们 当cpu1000时Textview单击它会导致cpu g1000其代码如下所示的类 public class Game 1000 extends AppC
  • 提供节点名或服务名,或未知 Java

    最近我尝试运行我的 Java 项目 每当我运行它并将其打开到我得到的服务器地址时 Unable to determine host name java net UnknownHostException Caused by java net
  • 如何在单个查询中搜索 RealmObject 的 RealmList 字段

    假设我有一堂课 public class Company extends RealmObject private String companyId private RealmList
  • 如何检查某个元素是否存在于一组项目中?

    In an ifJava中的语句如何检查一个对象是否存在于一组项目中 例如 在这种情况下 我需要验证水果是苹果 橙子还是香蕉 if fruitname in APPLE ORANGES GRAPES Do something 这是一件非常微
  • 如何在 Spring 中使 @PropertyResource 优先于任何其他 application.properties ?

    我正在尝试在类路径之外添加外部配置属性资源 它应该覆盖任何现有的属性 但以下方法不起作用 SpringBootApplication PropertySource d app properties public class MyClass
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • 如何仅从 Firestore 获取最新更新的数据?

    在 Firestore 上发现任何更改时始终获取整个文档 如何只获取最近更新的数据 这是我的数据 我需要在第一次加载时在聊天中按对象顺序 例如 2018 09 17 30 40 msg和sendby 并且如果数据更新则仅获取新的msg和se
  • 如何在 ant 中为 junit 测试设置 file.encoding?

    我还没有完全完成file encoding 和 ant https stackoverflow com questions 1339352 how do i set dfile encoding within ants build xml
  • Java继承,扩展类如何影响实际类

    我正在查看 Sun 认证学习指南 其中有一段描述了最终修饰符 它说 如果程序员可以自由地扩展我们所知的 String 类文明 它可能会崩溃 他什么意思 如果可以扩展 String 类 我是否不会有一个名为 MyString 的类继承所有 S
  • Jetty、websocket、java.lang.RuntimeException:无法加载平台配置器

    我尝试在 Endpoint 中获取 http 会话 我遵循了这个建议https stackoverflow com a 17994303 https stackoverflow com a 17994303 这就是我这样做的原因 publi
  • 轻松的反应

    我有一个与这里描述的类似的案例 动态更改RESTEasy服务返回类型 https stackoverflow com questions 3786781 dynamically change resteasy service return
  • Spring @Cacheable 和 @Async 注解

    我需要缓存一些异步计算的结果 具体来说 为了克服这个问题 我尝试使用 Spring 4 3 缓存和异步计算功能 作为示例 我们采用以下代码 Service class AsyncService Async Cacheable users C
  • 使用 HtmlUnit 定位弹出窗口

    我正在构建一个登录网站并抓取一些数据的程序 登录表单是一个弹出窗口 所以我需要访问这个www betexplorer com网站 在页面的右上角有一个登录链接 写着 登录 我单击该链接 然后出现登录弹出表单 我能够找到顶部的登录链接 但找不
  • 将 JScrollPane 添加到 JFrame

    我有一个关于向 Java 框架添加组件的问题 我有一个带有两个按钮的 JPanel 和一个添加了 JTable 的 JScrollPane 我想将这两个添加到 JFrame 中 我可以将 JPanel 添加到 JFrame 或将 JScro
  • java 中的蓝牙 (J2SE)

    我是蓝牙新手 这就是我想做的事情 我想获取连接到我的电脑上的蓝牙的设备信息并将该信息写入文件中 我应该使用哪个 api 以及如何实现 我遇到了 bluecove 但经过几次搜索 我发现 bluecove 不能在 64 位电脑上运行 我现在应
  • 子类构造函数(JAVA)中的重写函数[重复]

    这个问题在这里已经有答案了 为什么在派生类构造函数中调用超类构造函数时 id 0 当创建子对象时 什么时候在堆中为该对象分配内存 在基类构造函数运行之后还是之前 class Parent int id 10 Parent meth void

随机推荐

  • 仅 React-Bootstrap 关闭按钮样式不起作用

    对于我与 React Bootstrap 一起使用的所有组件 所有样式都有效 除了模态 警报等中内置的关闭按钮 示例如下 警报组件 预期 我看到的警报组件 模态组件 预期 我看到的模态组件 我正在使用的构建在 React Bootstrap
  • 覆盖自定义 UITableViewCell

    我有一个习惯UITableViewCell我这样使用 AppTableCell cell tableView dequeueReusableCellWithIdentifier CellIdentifier if cell nil NSAr
  • 从动词列表中检索动词

    我有一个全是动词的字符串列表 我需要获取每个动词的词频 但我想将 想要 想要 想要 和 想要 等动词计为一个动词 形式上 动词 被定义为 4 个单词的集合 其形式为 X Xs Xed Xing 或形式为 X Xes Xed Xing 其中
  • Excel VBA - 工作表属性未按应有的方式分配字段

    VBA 新手 尝试使用 Sheet 属性 就像在 OOP 语言中使用 Getters 和 Setters 一样 我在 Sheet1 中有以下代码 为了清晰起见 进行了简化 Option Explicit Private bAllowChan
  • NSArray或NSMutableArray的removeAllObjects方法会释放内存吗?

    我需要知道 NSArray 或 NSMutableArray 的 removeAllObjects 方法是否释放内存 如果我的数组有 10000 个元素 我可以使用 array removeAllObjects 释放内存并用其他元素重新加载
  • 获取服务器端时间和客户端时间之间的差异并显示它[重复]

    这个问题在这里已经有答案了 可能的重复 如何将 JavaScript 倒计时与服务器时间同步 https stackoverflow com questions 5357719 how to sync a javascript countd
  • 在 Glide 中查找并加载缓存的图像

    我是 glide 新手 想要将我的应用程序从 universalimageloader 迁移到 glide 我想将磁盘上的缓存图像转换为图像文件 并将其显示到 ImageView 中 当我使用universalimageloader时 我可
  • 100% CSS 布局,带页眉和页脚

    我正在尝试创建一个带有页眉和页脚 两者都有固定高度 以及它们之间的内容 div 的布局 该内容填充剩余空间 在 content div 中 我想要具有基于百分比值的高度的 div 以 content div 的 heihgt 作为父级 我不
  • 如何在 NS-3/ndnSIM 中模拟过程延迟?

    我想在发送兴趣包之前在消费者节点上添加一些进程延迟 我发现 Simulator Schedule 函数可以实现这个目的 但我不确定如何使用它 因为 ndnSIM 有自己的协议流程 如果我安排一个新事件 可能会导致一些意外的结果 或者是否有其
  • Swig:将Java中的字节数组传递给C

    我正在尝试创建 Java 实现 以便使用 Swig 将 byte 传递给 C Swig include typemaps i apply char STRING int LENGTH char buff int len inline typ
  • Java EE 5 和 Hibernate

    我可以将哪个版本的 Hibernate 与 Java EE 5 一起使用 我可以使用最新版本吗 See http www hibernate org http www hibernate org 它说最新的4 1 4版本可以与Java EE
  • 带列的数据透视表 pandas 中的百分比计算

    我有一个数据集 其中包含来自不同供应商 地点 日期和产品的多个销售登记册 数据集是这样的 local categoria fabricante tipo consistencia peso pacote ordem vendas kg AR
  • Spring:用于动态查询的通用 RowMapper

    我正在使用 SpringBatch 从 Oracle 读取数据并将其写入 ElasticSearch 我的代码对于静态查询效果很好 例子 select emp id emp name from employee table我有一个 RowM
  • 存储 std::shared_ptr 的向量,其中 Foo 是模板类

    我有一个基类 我将其作为模板 因为我想改变多个函数所需的类型 但我想从这些模板化基类派生 我想存储这些类的向量 我的想法是在层次结构中的所有内容之上创建一个非模板化基类 并使用双重调度来确定类型 我这样做是 正确的方式 吗 这是该场景的代码
  • 使用 sed 从文件中删除多字节字符

    我需要从文件中删除所有多字节字符 我不知道它们是什么 所以我需要覆盖整个范围 我可以使用 grep 找到它们 如下所示 grep P x80 xFF 我的文件 尝试用 sed 做类似的事情 但删除它们 Cheers 尝试一下 LANG C
  • 用于 Objective-C 开发的 Lint 检查工具 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 具有多个开发人员的大型项目通常会导致代码风格不一致 我正在寻找一个lint http en wikip
  • 如何识别 Visual Basic 中 MS Office 使用的显示语言(即工具栏/菜单)?

    我有一个宏 可以从 MS Excel 电子表格生成 MS Word 报告 我在报告中使用的样式在宏中以英语编码 我的一些团队将 MS Office 显示语言设置为法国 这并不奇怪 我在法国工作 因此 我的宏不起作用 因为样式标题 英文 用于
  • Python - 如果某个键不在一个列表中,则追加到另一个列表中

    这可能是一个相当简单的问题 但我还没有完全弄清楚 我有两个元组列表 List A a 0 033 b 0 030 c 0 020 d 0 010 e 0 005 List B a 0 057 b 0 065 w 0 060 x 0 040
  • 视图绑定 - 如何获取包含的布局的绑定?

    在使用视图绑定时 我遇到了一些未记录的案例 第一 如何获得包含的视图布局部分的绑定 主绑定只能看到主布局中定义的项目 第二 如何获得合并布局部分的绑定 同样 主绑定只能看到主布局中的项目 的情况下 包含通用布局 不是合并节点 我们需要为包含
  • 使用 Java 从数据库读取 UDT 的最佳方法是什么?

    我以为我了解有关 UDT 和 JDBC 的一切 直到有人SO http stackoverflow com指出了Javadoc的一些细节java sql SQLInput http download oracle com javase 6