我正在格式化ResultSet
以输出到CSV文件。因此,我真的不关心结果集的Java类型,除了可能知道它是文本还是数字。
JDBC保证getString是否总是给出值的字符串表示,至少为单个值(我不需要关心java.sql.Types.ARRAY
,java.sql.Types.JAVA_OBJECT
和其他几个)。
e.g。给定resultSetMetaData.getColumnType(i)
是Types.FLOAT
或Types.BIGDECIMAL
。 rs.GetString(i)
会不会产生一些字符串?
即。是否有getString会抛出一个SQLException或者当getXXX给我这个值时返回null?
答案 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()
总会做出明智的事情。