以下行返回具体的RDBMS类型。这种类型取决于RDBMS。如何在运行时知道ResultSet列类型的兼容java类型?
resultSet.getMetaData().getColumnTypeName(1)
例如,在我的情况下,它是VARCHAR
是否有可能知道在运行时兼容的Java类型?
如果上面的行返回VARCHAR
兼容类型是String
。
我想解决哪些方法调用:
resultSet.getXXX(...)
以下行返回具体的RDBMS类型。这种类型取决于RDBMS。如何在运行时知道ResultSet列类型的兼容java类型?
resultSet.getMetaData().getColumnTypeName(1)
例如,在我的情况下,它是VARCHAR
是否有可能知道在运行时兼容的Java类型?
如果上面的行返回VARCHAR
兼容类型是String
。
我想解决哪些方法调用:
resultSet.getXXX(...)
您可以使用该方法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类型。
我不这么认为。
当我这样做时,我不得不实现基本上是一个大的开关/ 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);
}
如果你找到一个更好的解决办法,我很想知道。
此解决方案更好http://stackoverflow.com/a/25572979/2674303 – gstackoverflow 2014-08-29 19:20:07
你可以将它保存到一个Object中,然后解析它到你需要的类。你可以通过''instance''来检查对象的类型。 – 2014-08-29 12:03:40