【问题标题】:How to know compatible java type for ResultSet column type in runtime?如何在运行时知道 ResultSet 列类型的兼容 Java 类型?
【发布时间】:2014-08-29 11:56:18
【问题描述】:

下一行返回具体的 RDBMS 类型。此类型取决于 RDBMS。

resultSet.getMetaData().getColumnTypeName(1)

例如在我的例子中是VARCHAR

是否有可能知道运行时兼容的java类型?

如果上面的行返回VARCHAR,兼容类型是String

我想解决调用了哪些方法:

resultSet.getXXX(...)

【问题讨论】:

  • 您可以将其保存到Object,然后将其解析为您需要的类。您可以通过instance of查看对象的类型。

标签: java sql jdbc type-conversion


【解决方案1】:

可以使用ResultSetMetaData.getColumnClassName(int)的方法:

如果调用方法ResultSet.getObject 以从列中检索值,则返回创建其实例的Java 类的完全限定名称。 ResultSet.getObject 可能会返回此方法返回的类的子类。

您也可以按照the answer of Daniel Scott 的演示对其进行编码,不过我会选择使用ResultSetMetaData.getColumnType(int),这样您就可以使用java.sql.Types 或(Java 8)java.sql.JDBCType 的常量进行切换。

您可以查看 JDBC 4.2 标准的附录 B,了解哪些 SQL 类型映射到哪些 Java 类型。

【讨论】:

    【解决方案2】:

    我不这么认为。

    当我这样做时,我必须实现基本上是一个大的 switch/case 语句,它获取列类型名称,然后执行相关的 resultSet.getXXX() 方法。

    伪代码:

    if(type.equals('VARCHAR') {
      String value = resultSet.getString(column)
    } else if (type.equals('TIMESTAMP') {
      Date value = resultSet.getDate(column)
    } else if (type.equals('INTEGER') {
      Integer value = resultSet.getInteger(column)
    } else
      throw new CannotParseTypeFromColumnException("Don't know how to handle type " + type);
    }
    

    如果您确实找到了更好的解决方案,我很想知道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多