有没有办法避免使用wasNull()方法?

时间:2011-06-13 14:53:09

标签: mysql jdbc resultset

我有几千行的大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); patientsResultSetpatientInput。这是我试图避免的代码。我的意思是,每次我执行object并执行getXXX()时,我必须再次检查我从setXXX()获得的内容不是ResultSet。如果是,则将该对象字段设置为null,因为在这种情况下null会返回getXXX()

2 个答案:

答案 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。

相关问题