【问题标题】:Is there a way to avoid wasNull() method?有没有办法避免 wasNull() 方法?
【发布时间】:2011-09-13 23:54:27
【问题描述】:

我有几千行的大 ResultSet(从 JDBC 查询中获取)。使用这些行中的每一行,我必须实例化一个Object,并根据此结果集的字段设置它的字段。现在,众所周知,如果该特定列是null,则此JDBC APIgetXXX() 方法将返回0。所以对于每一行的每个字段,我必须先做一个wasNull(),然后再在我的object 中设置值,这看起来很丑陋,而且可能效率也不高。那么,有没有其他方法可以避免呢?

除了 JDBC,如果有一些完全不同的、标准的、常用的方式,我也愿意了解。

谢谢!

编辑 1

patientInput.setRaceCodeId(patients.getShort("race_code_id"));  
if(patients.wasNull())
    patientInput.setRaceCodeId(null);

patientsResultSetpatientInputobject。这是我试图避免的代码。我的意思是,每次我执行getXXX()setXXX() 时,我都必须再次检查我从ResultSet 得到的不是null。如果是,则将该对象字段设置为null,因为在这种情况下getXXX() 返回0

【问题讨论】:

  • 你在使用 wasNull 遇到空值时设置什么?
  • @Gordon Murray Dent:很抱歉,我没有很好地回答您的问题。如果你问我在我的对象中设置什么字段,如果相应的列被发现为空,在这种情况下,我将该对象字段设置为null
  • 我可以看看代码示例吗?如果没有在上下文中看到您的问题,很难提供有用的建议。
  • @Gordon Murray Dent:请看问题,我已经添加了示例代码。

标签: mysql jdbc resultset


【解决方案1】:

您不必对每个字段都执行此操作,只需对数字字段(可能是布尔值)以及在数据库中声明为可为空的字段执行此操作。它不会像您担心的那样频繁发生。

如果您非常讨厌编写此类代码,可以尝试切换到 ORM 库,例如 Hibernate。

【讨论】:

  • 几乎所有字段都是数字,大约 20 :( 而且代码看起来很丑。我相信有更好的方法可以避免这种情况。
  • @Bhushan:我不认为在一个地方检查 wasNull() 20 次太难看。如果此代码遍布您的应用程序,请尝试将“丑陋”封装在一个类中或尽可能少的类中。如果这仍然太难看,请考虑切换到 ORM 库,该库会隐藏应用程序其他部分的此类细节。
【解决方案2】:

好的。我相信有两种可能的方法来“整理”你的代码。然而,这可能归结为关于什么是整洁的意见分歧!

解决方案 1 - 将 getXXX() 替换为返回 null 的 getObject(),例如

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));

【讨论】:

    猜你喜欢
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多