【发布时间】:2010-12-05 10:07:43
【问题描述】:
这是另一个有争议的主题,但这次我只寻找简单且有记录的答案。场景:
让我们假设以下方法: 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。 rs.next() 将为 null ResultSet 返回 false,或者将生成异常,如下所示:
字符串 str = null; System.out.println(str.toString());
3。如果在从 ResultSet 的当前行初始化 dog 对象时,发生了一些不好的事情,例如:连接失败、不兼容的值已传递给 dog 属性设置器等,该怎么办?我现在可能在哈希表中有 10 个元素,或者没有(第一行)。下一步将是什么: a) 返回 null 哈希表; b) 返回结果哈希表,就是这个阶段的样子; c) 抛出异常:这里的异常类型是什么?
4。我想你们都会同意这一点:没有什么不好的事情发生,审讯中没有行,将返回一个空值。但是,@Thorbjørn Ravn Andersen 说 here 我应该返回 NullObject 而不是 null 值。我想知道那是什么。
5。我注意到人们和一群人说应该将应用程序分成层或某种级别。考虑到上面的例子,这里有哪些层,除了我能想到的这些:
Layer1 :: 执行操作的数据库层:此方法。
第二层 :: ??? : 构造新 Dog 对象的某个层:我的 Dog 对象。
第三层 :: ? :我打算对狗的集合做某事的某个层:主要是 GUI 层,或用户界面的子层。
按照应用流程,如果第一层发生异常,最好的办法是什么?我的想法:捕获异常,记录异常,返回一些值。这是最佳做法吗?
曼尼感谢您的回答,我期待看到其他人对这些问题的看法。【问题讨论】:
-
代码缩进4个空格。
-
我没有大惊小怪。缩进,但实际上只是通过代码格式化程序对其进行格式化,这似乎越来越少:-(
-
我为问题方面道歉,但我应该怎么做呢?我在“String str = null; System.out.println(str.toString());”这些行上按了 n 次“代码”按钮;“..什么也没发生 :-(.
-
这不是问题,但我想知道格式是否与其他 HTML 元素(例如 s)混淆了
-
Hyper:选择要格式化为代码的行,然后按代码按钮。
标签: java mysql exception layer