如何在运行时知道ResultSet列类型的兼容java类型?

时间:2014-08-29 11:56:18

标签: java sql jdbc type-conversion

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

resultSet.getMetaData().getColumnTypeName(1)

例如,在我的情况下,它是VARCHAR

是否可以在运行时知道兼容的java类型?

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

我想解决调用哪些方法:

resultSet.getXXX(...)

2 个答案:

答案 0 :(得分:2)

您可以使用方法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类型。

答案 1 :(得分:0)

我不这么认为。

当我这样做时,我必须实现基本上是一个大的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);
}

如果你找到了更好的解决方案,我很乐意知道。