论坛首页 Java企业应用论坛

ResultSet 判断是否为空

浏览 14517 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2011-08-29  
dong706gmail 写道
直接
while (rs.next())
{
。。。
}
就行了 ....



肯定知道直接rs.next就可以了 
0 请登录后投票
   发表时间:2011-08-29   最后修改:2011-08-29
victor71 写道
API 看不懂吗?


还真的有点看不明白  像我的这种情况
if (rs.next()) {
rs.previous();
      //通用excel导出
OutExcel outExcel = new OutExcel();
     //outExcel还会循环 rs 必须用到判断的第一条数据
outExcel.outExcel(filePath, rs);
request.setAttribute("message", "导出成功");
} else {
request.setAttribute("message", "没有数据可导出");
}
0 请登录后投票
   发表时间:2011-08-29  
liu.anxin 写道
OMG...

如果事务不支持 rs.previous() 怎么办? 你 rs.next() 如果为空则不进入循环不就结了吗? 弄得这么麻烦



rs.next()  可以判断为空吗?  我是判断之后还要rs.next()判断的这条数据
0 请登录后投票
   发表时间:2011-08-31   最后修改:2011-08-31
zhouxingfu520 写道
rs.next()  可以判断为空吗?  我是判断之后还要rs.next()判断的这条数据


做事情要分清楚结构!

你这一块的代码只应该返回数据, 比如 一个实体 或是 一个List, 这样还能保证能被重用. 第一次使用 rs.next 返回 false, 则表示没数据了, 返回的数据就应该是 null

与业务有关(比如判断是否有数据可以导出)的功能点, 应该放在另一个地方去处理, 比如

if (list == null || list.size() == 0) {
...
}



了然 ?
0 请登录后投票
   发表时间:2011-09-01  
liu.anxin 写道
zhouxingfu520 写道
rs.next()  可以判断为空吗?  我是判断之后还要rs.next()判断的这条数据


做事情要分清楚结构!

你这一块的代码只应该返回数据, 比如 一个实体 或是 一个List, 这样还能保证能被重用. 第一次使用 rs.next 返回 false, 则表示没数据了, 返回的数据就应该是 null

与业务有关(比如判断是否有数据可以导出)的功能点, 应该放在另一个地方去处理, 比如

if (list == null || list.size() == 0) {
...
}



了然 ?

我明白你的意思  逻辑都是对的  还是那句与业务有关     我这里  里面是提供的库组件OutExcel  只传rs对象  而且一调用就会打开读取excel文件了  所以只能在外面判断
0 请登录后投票
   发表时间:2011-09-01  
在这个地方  你可以在while之前做判断
0 请登录后投票
   发表时间:2011-09-01  
zhouxingfu520 写道
liu.anxin 写道
zhouxingfu520 写道
rs.next()  可以判断为空吗?  我是判断之后还要rs.next()判断的这条数据


做事情要分清楚结构!

你这一块的代码只应该返回数据, 比如 一个实体 或是 一个List, 这样还能保证能被重用. 第一次使用 rs.next 返回 false, 则表示没数据了, 返回的数据就应该是 null

与业务有关(比如判断是否有数据可以导出)的功能点, 应该放在另一个地方去处理, 比如

if (list == null || list.size() == 0) {
...
}



了然 ?

我明白你的意思  逻辑都是对的  还是那句与业务有关     我这里  里面是提供的库组件OutExcel  只传rs对象  而且一调用就会打开读取excel文件了  所以只能在外面判断

你是说你的Excel组件提供的rs对象没有按照jdbc的标准来实现ResultSet么?
如果是这样,请标注特例。因为你的特例对大家日常使用jdbc没有任何意义。
如果不是上述情况,就只能说你概念糊涂了。
0 请登录后投票
   发表时间:2011-09-03   最后修改:2011-09-03
zhouxingfu520 写道

if (rs.next()) {
	rs.previous();
      //通用excel导出
	OutExcel outExcel = new OutExcel();
     //outExcel还会循环 rs 必须用到判断的第一条数据
	outExcel.outExcel(filePath, rs);
	request.setAttribute("message", "导出成功");
} else {
	request.setAttribute("message", "没有数据可导出");
}


你有想过没有, 你的 rs 和跟数据库的连接是需要关闭的, 如果在调用
outExcel.outExcel(filePath, rs)
方法的时候程序挂起了, 你这个连接怎么办? 多次这么来几下, 你的连接池会不会被耗尽 ?

所以, 这个地方, 你的代码应该改成
outExcel.outExcel(filePath, list)
在使用这个 list 的时候, 前面的, 与数据库的操作都是完成了的, 连接都是交还给连接池了的!

而怎么对这个 list 做业务上的处理, 是你应该关心的重点!


了然?
0 请登录后投票
   发表时间:2011-09-09  
要实现读取上一条记录功能,只需要第一条中的rs双向滚动,就可以了,第二条没用
0 请登录后投票
   发表时间:2011-09-14  
liu.anxin 写道
zhouxingfu520 写道

if (rs.next()) {
	rs.previous();
      //通用excel导出
	OutExcel outExcel = new OutExcel();
     //outExcel还会循环 rs 必须用到判断的第一条数据
	outExcel.outExcel(filePath, rs);
	request.setAttribute("message", "导出成功");
} else {
	request.setAttribute("message", "没有数据可导出");
}


你有想过没有, 你的 rs 和跟数据库的连接是需要关闭的, 如果在调用
outExcel.outExcel(filePath, rs)
方法的时候程序挂起了, 你这个连接怎么办? 多次这么来几下, 你的连接池会不会被耗尽 ?

所以, 这个地方, 你的代码应该改成
outExcel.outExcel(filePath, list)
在使用这个 list 的时候, 前面的, 与数据库的操作都是完成了的, 连接都是交还给连接池了的!

而怎么对这个 list 做业务上的处理, 是你应该关心的重点!


了然?



+1
赞同他说的,就不说连接池吧,如果在导出时发生异常了,rs.close(),你的操作还有意义么?尽量不要让资源长时间开着。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics