Java和SQL:返回null或抛出异常?
这是另一个有争议的主题,但这次我只搜索简单而有记录的答案.场景:
?我们假设以下方法: 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,或者将生成一个异常,如下所示: String str = null; 的System.out.println(str.toString()); 3.如果在从ResultSet的当前行初始化dog对象时发生了一些不好的事情,例如:连接失败,不兼容的值已经传递给dog属性设置器等等,该怎么办?我现在可能在哈希表中有10个元素,或者没有(第一行).下一步操作是什么:a)返回空哈希表; b)返回结果哈希表,它在这个阶段的方式; c)抛出异常:这里的异常类型是什么? 4.我想你们都会同意这一点:没有什么不好的事情发生,审讯中没有行,将返回空值.但是,@Thorbj?rnRavnAndersen说here我应该返回一个NullObject而不是null值.我不知道那是什么. 5.我注意到人们和一群人说应该将应用程序分成几层或某种层次.考虑到上面的例子,这里有哪些层,除了我能想到的这些层: Layer1 :: Database层,执行操作:此方法. ?在应用程序流程之后,如果在第一层中发生异常,最好的想法是什么呢?我的想法:捕获异常,记录异常,返回一些值.这是最好的做法吗? 解决方法
你问五个问题
实际上有几个. >你的方法是静态的 – 这并不可怕,但会导致你使用另一个静态的“executeQuery”,这对我来说有点像辛格尔顿……
这似乎不是一个问题,但是,只要没有任何行要处理,rs.next()就会返回false.
如果“发生了一些不好的事情”,你接下来要做的就取决于你和你的设计.有宽容的方法(返回你可以的所有行)和不宽容(抛出异常).我倾向于倾向于“无情”的方法,因为使用“宽容”的方法,用户不会知道你没有返回所有存在的行 – 只是你在错误之前得到的所有行.但是可能存在宽容方法的情况.
这不是一个明显正确答案的东西.首先,它不是所写方法中发生的事情.它将返回一个空的HashTable(这是“null对象”的意思).其次,在“未找到结果”的情况下,null并不总是答案. 我见过null,但我也看到了一个空结果变量.我声称它们都是正确的方法,但我更喜欢空的结果变量.但是,最好保持一致,所以选择一种返回“无结果”并坚持下去的方法.
这比其他人更难回答,而没有看到你的应用程序的其余部分. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |