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
不应该对所有数据类型都支持。