我有几千行的大ResultSet
(来自JDBC
查询)。使用这些行中的每一行,我必须实例化Object
,根据此结果集的字段设置它的字段。现在,众所周知,如果该特定列为getXXX()
,则此JDBC API
的{{1}}方法会返回0
。因此,对于每一行的每个字段,我必须在null
中设置值之前执行wasNull()
,这看起来非常难看,也可能效率不高。那么,有什么其他方法可以避免它吗?
除了JDBC之外,如果有一些完全不同的,标准的,常用的方式,我也很乐意了解它。
谢谢!
编辑1
object
patientInput.setRaceCodeId(patients.getShort("race_code_id"));
if(patients.wasNull())
patientInput.setRaceCodeId(null);
是patients
。 ResultSet
是patientInput
。这是我试图避免的代码。我的意思是,每次我执行object
并执行getXXX()
时,我必须再次检查我从setXXX()
获得的内容不是ResultSet
。如果是,则将该对象字段设置为null
,因为在这种情况下null
会返回getXXX()
。
答案 0 :(得分:3)
确定。我相信有两种方法可以“整理”你的代码。然而,这可能归结为对什么是整洁的意见分歧!
解决方案1 - 将 getXXX()替换为 getObject(),返回null,例如
Short s = (Short)patients.getObject("race_code_id");
patientInput.setRaceCodeId(s);
解决方案2 - 编写一个通用包装器方法,检索可以为空的值
protected final <T> T getNullableValue(T returnType, String colName, ResultSet rs) throws SQLException {
Object colValue = rs.getObject(colName);
return (T) colValue;
}
final static Integer INT = 0;
final static Short SHORT = 0;
.
.
.
patientInput.setRaceCodeId(getNullableValue(SHORT,"race_code_id",patients));
答案 1 :(得分:1)
您不必对每个字段执行此操作,只需对数字字段(可能是布尔值)执行此操作,并在数据库中声明为可为空。它不会像你担心的那样频繁发生。
如果您非常讨厌编写此类代码,可以尝试切换到ORM库,例如Hibernate。