Java 什么';getInt()和新整数(getString())之间的区别是什么?

Java 什么';getInt()和新整数(getString())之间的区别是什么?,java,jdbc,Java,Jdbc,假设rs是从PreparedStatement或Statement对象的执行中获得的结果集。 我本来打算用Integer data=rs.getInt(1)从结果集中提取一个整数值,但老板让我用Integer data=newinteger(rs.getString(1))或Integer data=Integer.valueOf(rs.getString(1))。 我只是不明白为什么。有谁能告诉我使用getString而不是getInt有什么好处吗?ResultSet.getString()将

假设
rs
是从PreparedStatement或Statement对象的执行中获得的结果集。 我本来打算用
Integer data=rs.getInt(1)
从结果集中提取一个整数值,但老板让我用
Integer data=newinteger(rs.getString(1))
Integer data=Integer.valueOf(rs.getString(1))
。 我只是不明白为什么。有谁能告诉我使用
getString
而不是
getInt
有什么好处吗?

ResultSet.getString()
将返回一个
String
对象,
ResultSet.getInt()
返回一个
int

ResultSet.getString()
在所有情况下都有效,因为所有对象都可以通过
Object.toString()
转换为
String
ResultSet.getInt()
仅在底层SQL数据类型为数字且适合
int
时才起作用

因此,
ResultSet.getString()
更灵活,但如果数字已经是整数,则显然效率较低。此外,任何人都不太可能在数据库中将数字存储为字符串(这需要进行这种转换)


null
值并不是一个真正的问题,因为javadoc of声明,如果数据为SQL null,则返回值
0
(尽管这可能不是您想要的)。新的整数(rs.getString(1))将抛出一个
NumberFormatException

该字段可能包含SQL NULL,因此您希望java Integer包含java NULL。对于基元类型
int
,这是不可能的


您可以检查列定义;我希望不存在
非空
约束。

对于Integer.valueOf(rs.getString(1)),您可以检查NumberFormatException,并将其作为data=NULL进行处理。在rs.getInt(1)的情况下,您将收到正确的整数“0”值,而不是任何空标记-因此您不会理解它是空字段,并且无法为空情况编写任何逻辑,这可能需要不同的处理-异常或任何默认值或另一个“if”子句等。

我建议询问您的老板:)通常没有好处,但你们可能会将int值保存在数据库中作为字符串,所以你们需要手动转换它们。问你们的老板为什么。并非所有RDBMS都会采用您提到的方法。有些可能只是直接从数据库
NUMERIC
type数据类型的
getInt()
调用返回
int
。这完全取决于相关RDBMS供应商对
ResultSet
的实施。最好的方法是使用
ResultSetMetaData
获取正确的数据类型映射并调用相应的getter方法。具体取决于数据库列类型。该列中包含字符串?要检查基元类型的NULL值,请使用
ResultSet.wasNull()
在使用
getInt()时检查
NULL
ResultSet.wasNull()
谢谢icza,也许我的老板想在底层数据库中的值为null时检查NumberFormatException。如果您查看JDBC 4.2规范的附录B,那么
getString
不应该对所有数据类型都支持。