2014-08-29 75 views
0

以下行返回具体的RDBMS类型。这种类型取决于RDBMS。如何在运行时知道ResultSet列类型的兼容java类型?

resultSet.getMetaData().getColumnTypeName(1) 

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

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

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

我想解决哪些方法调用:

resultSet.getXXX(...) 
+0

你可以将它保存到一个Object中,然后解析它到你需要的类。你可以通过''instance''来检查对象的类型。 – 2014-08-29 12:03:40

回答

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类型。

0

我不这么认为。

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

如果你找到一个更好的解决办法,我很想知道。

+0

此解决方案更好http://stackoverflow.com/a/25572979/2674303 – gstackoverflow 2014-08-29 19:20:07