锁定老帖子 主题:ResultSet 判断是否为空
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2011-08-29
dong706gmail 写道 直接
while (rs.next()) { 。。。 } 就行了 .... 肯定知道直接rs.next就可以了 |
|
返回顶楼 | |
发表时间: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", "没有数据可导出"); } |
|
返回顶楼 | |
发表时间:2011-08-29
liu.anxin 写道 OMG...
如果事务不支持 rs.previous() 怎么办? 你 rs.next() 如果为空则不进入循环不就结了吗? 弄得这么麻烦 rs.next() 可以判断为空吗? 我是判断之后还要rs.next()判断的这条数据 |
|
返回顶楼 | |
发表时间:2011-08-31
最后修改:2011-08-31
zhouxingfu520 写道 rs.next() 可以判断为空吗? 我是判断之后还要rs.next()判断的这条数据
做事情要分清楚结构! 你这一块的代码只应该返回数据, 比如 一个实体 或是 一个List, 这样还能保证能被重用. 第一次使用 rs.next 返回 false, 则表示没数据了, 返回的数据就应该是 null 与业务有关(比如判断是否有数据可以导出)的功能点, 应该放在另一个地方去处理, 比如 if (list == null || list.size() == 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文件了 所以只能在外面判断 |
|
返回顶楼 | |
发表时间:2011-09-01
在这个地方 你可以在while之前做判断
|
|
返回顶楼 | |
发表时间: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没有任何意义。 如果不是上述情况,就只能说你概念糊涂了。 |
|
返回顶楼 | |
发表时间: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 做业务上的处理, 是你应该关心的重点! 了然? |
|
返回顶楼 | |
发表时间:2011-09-09
要实现读取上一条记录功能,只需要第一条中的rs双向滚动,就可以了,第二条没用
|
|
返回顶楼 | |
发表时间: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(),你的操作还有意义么?尽量不要让资源长时间开着。 |
|
返回顶楼 | |