public static Hashtable<Long, Dog> getSomeDogs(String colName, String colValue) {
Hashtable<Long, Dog> result = new Hashtable<Long, Dog>();
StringBuffer sql = null;
Dog dog = null;
ResultSet rs = null;
try {
sql = new StringBuffer();
sql.append("SELECT * FROM ").append("dogs_table");
sql.append(" WHERE ").append(colName).append("='");
sql.append(colValue).append("'");
rs = executeQuery(sql.toString());
while (rs.next()) {
dog= new Dog();
//...initialize the dog from the current resultSet row
result.put(new Long(dog.getId()), dog);
}
}
catch (Exception e) {
createErrorMsg(e);
result = null; //i wonder....
}
finally {
closeResultSet(rs); //this method tests for null rs and other stuff when closing the rs.
}
return result;
}
问题:
1. 你建议改进这种具有某些属性的狗返回技术的方法有哪些?
2. 对于空ResultSet,rs.next()将返回false,或者会生成一个异常,例如:
System.out.println(str.toString());
3. 如果在从ResultSet的当前行初始化狗对象时出现问题,例如:连接失败,向狗属性setter传递了不兼容的值等,则会发生什么情况?现在我可能已经在哈希表中拥有10个元素,也可能没有(第一行)。下一步操作将是什么:a)返回null哈希表;b)以目前的状态返回结果哈希表;c)抛出异常:此处的异常类型将是什么?
4. 我认为您都会同意:没有发生任何不良事件,质询上没有行,将返回空值。但是,@Thorbjørn Ravn Andersen在这里说,我应该返回NullObject而不是null值。我想知道那是什么。
5. 我注意到人们和人群说应将应用程序分成层或某种级别。考虑上面的例子,除了我能想到的这些层之外,还有哪些层:
Layer1 :: 数据库层,执行操作:此方法。
Layer2 :: ??? :某个层,在此层中构造新的Dog对象:我的Dog对象。
Layer3 :: ? :我打算对狗的集合做些什么:大多是GUI层,或用户界面的子层。
根据应用程序流程,如果在第1层中发生异常,最好处理它? 我的想法:捕获异常,记录异常,返回一些值。这是最佳实践吗?