java sql null_Java和SQL:返回null还是抛出异常?

这是另一个有争议的主题,但是这次我只在寻找简单且记录在案的答案。场景:

让我们假设以下方法:

public static Hashtable getSomeDogs(String colName, String colValue) {

Hashtable result = new Hashtable();

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()对于空的ResultSet将返回false,或者将生成异常,例如:

字符串str = null; System.out.println(str.toString());

3.如果在从ResultSet的当前行初始化一个dog对象时,发生了什么不好的事情,例如:连接失败,不兼容的值已传递给dog属性设置器等怎么办?到现在,哈希表中可能有10个元素,或者没有(第一行)。接下来的动作是什么:a)返回空哈希表;b)返回结果哈希表,此阶段的方式;c)抛出异常:这里的异常类型是什么?

4.我想你们都会同意这一点:没有什么不好的事情发生,在查询中没有行,将返回空值。但是,@ThorbjørnRavn Andersen

在这里说,我应该返回NullObject而不是null值。我不知道那是什么。

5.我注意到有人和一群人在说,应该将应用程序分成若干层或某种级别。考虑上面的示例,除了我可以想到的那些层之外,这里还有什么层:

Layer1 ::执行操作的数据库层:此方法。

Layer2 :: ??? :构造新Dog对象的某些层:my Dog对象。

Layer3 ::吗?:某些层,我打算对狗进行处理:GUI层,主要是用户界面的子层。

遵循应用程序流程,如果在第一层发生异常,最好的处理方法是什么?我的想法:捕获异常,记录异常,返回一些值。那是最佳实践吗?

曼尼(Manny)感谢您的回答,我期待看到其他人对这些问题的看法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值