getInt()和new Integer(getString())之间的区别是什么?

时间:2014-09-09 13:18:50

标签: java jdbc

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

3 个答案:

答案 0 :(得分:1)

ResultSet.getString()将返回String个对象,ResultSet.getInt()会返回int个值。

ResultSet.getString()适用于所有情况,因为所有对象都可以使用String转换为Object.toString()ResultSet.getInt()仅在基础SQL数据类型为数字且适合int时才有效。

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

null值并不是真正的问题,因为ResultSet.getInt()的javadoc声明如果数据是SQL NULL,则返回值0(尽管这可能不是您想要的) 。并且new Integer(rs.getString(1))会抛出NumberFormatException

答案 1 :(得分:0)

该字段可能包含SQL NULL,因此您希望java Integer保存java null。使用原始类型int,这是不可能的。

您可以检查列定义;我希望没有NOT NULL约束。

答案 2 :(得分:0)

如果是Integer.valueOf(rs.getString(1)),您可以检查NumberFormatException并将其作为data = null继续。在rs.getInt(1)的情况下,您将收到正确的整数“0”值而不是任何空标记 - 因此您将无法理解它是空字段并且无法为空案例编写任何逻辑,这可能需要不同处理 - 例外或任何默认值或其他“if”条款等。