Ale*_*aev 4 java null jdbc prepared-statement
典型的情况:我们有一些Integer可以为类的可空列,它可能是两个null或一些int值.所以我们使用以下内容:
private static void setIntOrNull(PreparedStatement stmt, int col, Integer i)
throws SQLException
{
if (i == null)
stmt.setNull(col, java.sql.Types.INTEGER);
else
stmt.setInt(col, i);
}
Run Code Online (Sandbox Code Playgroud)
但对我来说这种情况下是一种不好的做法-以内部空隙更改方法中的外部对象(reffering到罗伯特·马丁的"清洁守则"第17章:气味和启发,功能,F2).我尽量避免这种情况,但这次我找不到更好的解决方案.也许有人可以帮我一个人?
我认为这不是特别糟糕,真的.让我们来看看:
void,所以它必须有副作用,或无用所以无论是副作用将是一个全球性的一个(例如外部诸如文件系统,内部如静态变量,或时间例如睡眠)或它会影响由参数所指的对象之一.
该int不是一个对象,Integer对象是不可改变的,所以只可以影响事情是PreparedStatement.由于准备语句的目的之一是收集参数数据,因此该方法将这样做似乎是完全合理的.方法名称使这更加清晰 - 如果不是在准备好的语句中,它还会"设置"一个int或null?
基本上:别担心:)
你可能希望通过将它移动到一个公共的"助手"类来更清楚地表达这一点PreparedStatementHelper- 这使得你可能很明显你真的想要使用这些方法PreparedStatement,但它们并非如此,你必须拥有它一个静态方法,而不是作用于一个PreparedStatement.
一种替代方法是创建自己的包装类,它将维护一个PreparedStatement自身,并有一个实例setIntOrNull方法......但从长远来看,我认为这将更复杂,几乎没有什么好处.