假设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
有什么好处?
答案 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”条款等。