JDBC ResultSet getString总是返回String表示吗?

时间:2010-01-15 13:36:40

标签: jdbc

我正在格式化ResultSet以输出到CSV文件。因此,我真的不关心结果集的Java类型,除了可能知道它是文本还是数字。

JDBC保证getString是否总是给出值的字符串表示,至少为单个值(我不需要关心java.sql.Types.ARRAYjava.sql.Types.JAVA_OBJECT和其他几个)。

e.g。给定resultSetMetaData.getColumnType(i)Types.FLOATTypes.BIGDECIMALrs.GetString(i)会不会产生一些字符串?

即。是否有getString会抛出一个SQLException或者当getXXX给我这个值时返回null?

2 个答案:

答案 0 :(得分:12)

是的,请查看:http://java.sun.com/docs/books/tutorial/jdbc/basics/retrieving.html

  

JDBC允许使用多个getXXX方法来检索不同的SQL类型。例如,方法getInt可用于检索任何数字或字符类型。它检索的数据将转换为int;也就是说,如果SQL类型是VARCHAR,JDBC将尝试解析VARCHAR中的整数。但是,建议使用getInt方法仅检索SQL INTEGER类型,并且它不能用于SQL类型BINARY,VARBINARY,LONGVARBINARY,DATE,TIME或TIMESTAMP。

但要小心,不同的JDBC驱动程序可能会产生不同的结果。

答案 1 :(得分:5)

java.lang.String是一个最终类 - 它不能拥有一个子类。因此,返回String的任何方法都将返回类java.lang.String的实例或null,或者抛出异常。

对于转换,如果它允许您从非String类型转换,则由JDBC驱动程序决定。我怀疑很多人都会遇到问题。

我建议您这样做:

Object item = resultSet.getObject(i);
String strValue = (item == null ? null : item.toString());

这应该更加强大,因为getObject()总会做出明智的事情。