【问题标题】:JDBC setObject with String type only仅具有 String 类型的 JDBC setObject
【发布时间】:2015-08-03 15:23:30
【问题描述】:

我正在使用包装 JDBC 的 JDBC 模板(SPRING)。在运行时,我所有的变量值(绑定变量)都保存为字符串(对它们的实际类型有一定的认识:bigint\varchar 等)。 当我使用 setObject 时,我不确定是否需要将变量值转换为真实类型,或者我可以将变量作为字符串发送到 setObject,数据库将根据数据库中的列名进行转换(即如果它与 BigInt 进行比较,则它将字符串转换为 big int 然后查询等)

谢谢,

【问题讨论】:

  • 哪个版本的 Spring?
  • 目前为 4.2。为什么重要?
  • 可能不是,只是想在我提供答案之前确保它不是一个非常旧的版本。
  • 你在哪个类上调用“setObject”?
  • 我并没有真正使用 setObject,因为我使用了 SPRING API:public <T> T query(String sql, Object[] args, ResultSetExtractor<T> rse) throws DataAccessException 希望它有意义

标签: java jdbc jdbctemplate


【解决方案1】:

如果我正确理解您的问题,那么我认为您不能使用 setObject 传递将转换为非字符串 SQL 类型(int、bigint)的字符串。

看看this question。以下是该问题的答案。

setObject 的工作不是确定正确转换为 列类型。 setObject javadoc 说,“JDBC 规范 指定从 Java 对象类型到 SQL 类型的标准映射。这 给定的参数将在之前转换为相应的 SQL 类型 被发送到数据库。”所以它只查看 Java 类型的 传递给它的对象并将其转换为 SQL 类型。所以你通过它 一个字符串,并将其转换为适当的 varchar。如果你 希望 setObject 转换为不同的类型,这就是原因 对于采用目标 sql 类型的附加 setObject 变体 转换为,但这对您不知道什么的情况没有帮助 目标类型是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    相关资源
    最近更新 更多