以下行返回具体的RDBMS类型。此类型取决于RDBMS。
resultSet.getMetaData().getColumnTypeName(1)
例如,在我的情况下,它是VARCHAR
是否可以在运行时知道兼容的java类型?
如果上面的行返回VARCHAR
,则兼容类型为String
。
我想解决调用哪些方法:
resultSet.getXXX(...)
答案 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);
}
如果你找到了更好的解决方案,我很乐意知道。