java no resultset_jdbc - Java ResultSet如何检查是否有任何结果

jdbc - Java ResultSet如何检查是否有任何结果

结果集没有hasNext的方法。 我想检查resultSet是否有任何值

这是正确的方法

if (!resultSet.next() ) {

System.out.println("no data");

}

kal asked 2019-02-19T19:16:57Z

21个解决方案

472 votes

假设您正在使用新返回的ResultSet,其光标指向第一行之前,更简单的方法是只调用isBeforeFirst()。这样可以避免在需要读取数据时进行回溯。

如文档中所述,如果游标不在第一个记录之前或者ResultSet中没有行,则返回false。

if (!resultSet.isBeforeFirst() ) {

System.out.println("No data");

}

Seifer answered 2019-02-19T19:17:54Z

209 votes

这是正确的,最初beforeFirst()的光标指向第一行之前,如果第一次调用next()返回false那么ResultSet中没有数据。

如果您使用此方法,则可能必须在重置之后立即调用beforeFirst(),因为它现在已经将自己定位在第一行之外。

但应该注意的是,Seifer的答案是对这个问题更优雅的解决方案。

ninesided answered 2019-02-19T19:17:21Z

44 votes

你可以随时做前一个,然后做一个后循环检查

if (!resultSet.next() ) {

System.out.println("no data");

} else {

do {

//statement(s)

} while (resultSet.next());

}

Maslow answered 2019-02-19T19:18:19Z

19 votes

你通常会这样做:

while ( resultSet.next() ) {

// Read the next item

resultSet.getString("columnName");

}

如果要报告空集,请添加一个计算读取项的变量。 如果您只需要阅读单个项目,那么您的代码就足够了。

kgiannakakis answered 2019-02-19T19:18:52Z

8 votes

根据最可行的答案,建议是使用“isBeforeFirst()”。 如果你没有“前进型”,这不是最好的解决方案。

有一种叫做“.first()”的方法。 获得完全相同的结果并不是一件坏事。 您检查“结果集”中是否有某些内容并且不要使光标前进。

文档说明:“(...)如果结果集中没有行,则为false”。

if(rs.first()){

//do stuff

}

您也可以调用isBeforeFirst()来测试是否在没有前进光标的情况下返回任何行,然后正常进行。 - SnakeDoc 2014年9月2日19:00

但是,“isBeforeFirst()”和“first()”之间存在差异。 如果在“仅向前”类型的结果集上完成,则首先生成异常。

比较两个投掷部分:[http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#isBeforeFirst()][http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#first()]

好吧,基本上这意味着你应该使用“isBeforeFirst”,只要你有“仅向前”类型。 否则使用“first()”就不那么过分了。

OddDev answered 2019-02-19T19:19:57Z

7 votes

最好使用ResultSet.next()以及do {...} while()语法。

“检查任何结果”调用ResultSet.next()将光标移动到第一行,因此使用do {...} while()语法处理该行,同时继续处理循环返回的剩余行。

这样您就可以检查任何结果,同时还可以处理返回的任何结果。

if(resultSet.next()) { // Checks for any results and moves cursor to first row,

do { // Use 'do...while' to process the first row, while continuing to process remaining rows

} while (resultSet.next());

}

Dermot Doherty answered 2019-02-19T19:20:36Z

6 votes

无论光标位置如何,要完全确定结果集是否为空,我会做这样的事情:

public static boolean isMyResultSetEmpty(ResultSet rs) throws SQLException {

return (!rs.isBeforeFirst() && rs.getRow() == 0);

}

如果ResultSet为空,则此函数将返回true,否则返回false;如果ResultSet已关闭/未初始化,则返回SQLException。

Felype answered 2019-02-19T19:21:09Z

5 votes

如果您想查看结果集中是否有任何行,那将会有效。

请注意,next()始终移动到下一行,因此如果您计划从结果集中进行任何读取,则需要将其考虑在内。

ResultSet的常用用法(简单阅读时)是:

while (resultSet.next())

{

... read from the row here ...

}

如果您已经调用next()检查结果集是否为空,那么显然无法正常工作,请注意这一点。 尽管存在“备份”的方法,但并不支持所有类型的结果集。

Nuoji answered 2019-02-19T19:21:56Z

4 votes

我相信这是一本实用且易读的作品。

if (res.next()) {

do {

// successfully in. do the right things.

} while (res.next());

} else {

// no results back. warn the user.

}

JSBach answered 2019-02-19T19:22:21Z

2 votes

if (!resultSet.isAfterLast() ) {

System.out.println("No data");

}

isAfterLast()也为空结果集返回false,但由于光标无论如何都在第一行之前,这个方法似乎更清楚。

Nick Warke answered 2019-02-19T19:22:47Z

1 votes

要做的最好的事情是检查第一行,这样当您打算获取数据时,可以避免跳过一行的错误。 类似于:if(!resultSet.first()){System.out.println(“no data”);}

Anthony Oyovwe answered 2019-02-19T19:23:15Z

1 votes

通过使用resultSet.next(),您可以轻松获得结果,无论resultSet是否包含任何值

ResultSet resultSet = preparedStatement.executeQuery();

if(resultSet.next())

//resultSet contain some values

else

// empty resultSet

Ram72119 answered 2019-02-19T19:23:42Z

1 votes

ResultSet rs = rs.executeQuery();

if(rs.next())

{

rs = rs.executeQuery();

while(rs.next())

{

//do code part

}

}

else

{

//else if no result set

}

最好重新执行查询,因为当我们调用if(rs.next()){....}时,第一行ResultSet将被执行,而在while(rs.next()){....}之后,我们将从下一行获得结果。 所以我认为重新执行if内部的查询是更好的选择。

Arpit Trivedi answered 2019-02-19T19:24:09Z

1 votes

ResultSet result = stmt.executeQuery(sqlQuery);

if (!result.next())

status = "ERROR";

else

status = "SUCCESS";

Deepu Surendran answered 2019-02-19T19:24:29Z

1 votes

我创建了以下方法来检查ResultSet是否为空。

public static boolean resultSetIsEmpty(ResultSet rs){

try {

// We point the last row

rs.last();

int rsRows=rs.getRow(); // get last row number

if (rsRows == 0) {

return true;

}

// It is necessary to back to top the pointer, so we can see all rows in our ResultSet object.

rs.beforeFirst();

return false;

}catch(SQLException ex){

return true;

}

}

考虑以下因素非常重要:

必须设置CallableStatement对象以让ResultSet对象在最后返回并返回顶部。

TYPE_SCROLL_SENSITIVE:ResultSet对象可以在最后移动并返回顶部。 进一步可以捕捉最后的变化

CONCUR_READ_ONLY:我们可以读取ResultSet对象数据,但无法更新。

CallableStatement proc = dbconex.prepareCall(select, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

Cristian answered 2019-02-19T19:25:22Z

1 votes

if(resultSet.first) {

} else {

system.out.println("No raw or resultSet is empty");

}

因为如果ResultSet没有raw,则resultSet.first返回false。

user868927 answered 2019-02-19T19:25:49Z

0 votes

你可以做这样的事情

boolean found = false;

while ( resultSet.next() )

{

found = true;

resultSet.getString("column_name");

}

if (!found)

System.out.println("No Data");

Mohamed EL-Shabrawy answered 2019-02-19T19:26:16Z

0 votes

我一直在尝试将当前行设置为第一个索引(处理主键)。 我会建议

if(rs.absolute(1)){

System.out.println("We have data");

} else {

System.out.println("No data");

}

填充ResultSet时,它指向第一行之前。 将其设置为第一行(由rs.absolute(1)指示)时,将返回true表示它已成功放置在第1行,如果该行不存在则返回false。 我们可以推断这个

for(int i=1; rs.absolute(i); i++){

//Code

}

它将当前行设置为位置i,如果该行不存在则将失败。 这只是一种替代方法

while(rs.next()){

//Code

}

Andrew answered 2019-02-19T19:26:58Z

0 votes

我认为检查结果集的最简单方法是通过包org.apache.commons.collections.CollectionUtils下的CollectionUtils。

if(CollectionUtils.isNotEmpty(resultList)){

/**

* do some stuff

*/

}

这将检查null和空结果集条件。

有关更多详细信息,请参阅以下文档。CollectionUtils

Mitul Maheshwari answered 2019-02-19T19:27:38Z

0 votes

为什么不使用rs.getRow()?

int getRow()

throws SQLException

Retrieves the current row number. The first row is number 1, the second number 2, and so on.

Note:Support for the getRow method is optional for ResultSets with a result set type of TYPE_FORWARD_ONLY

Returns:

the current row number; 0 if there is no current row

Throws:

SQLException - if a database access error occurs or this method is called on a closed result set

SQLFeatureNotSupportedException - if the JDBC driver does not support this method

Since:

1.2

对我来说,检查“if(rs.getRow()!= 0)”似乎工作正常。

stiebrs answered 2019-02-19T19:28:12Z

-2 votes

最初,结果集对象(rs)指向BFR(在第一个记录之前)。 一旦我们使用rs.next(),光标指向第一条记录,rs保持“true”。 使用while循环可以打印表的所有记录。 检索完所有记录后,光标移动到ALR(在最后一条记录之后),它将被设置为null。 让我们考虑表中有2条记录。

if(rs.next()==false){

// there are no records found

}

while (rs.next()==true){

// print all the records of the table

}

简而言之,我们也可以将条件写为while(rs.next())。

Shiva answered 2019-02-19T19:28:46Z

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图解谷歌大脑丶城市大脑丶全球脑与互联网大脑的关系

人类很早就朦胧的发现社会组织具有神经系统的特征。19世纪到20世纪,一些前瞻的哲学家们开始不断将科技与脑进行了关联,提出了"器官映射","社会神经网络","全球脑"。 21世纪之后,更多科技大脑概念不断涌现,从互联网大脑到城市大脑,从谷…

Ubuntu 安装调整工具移动 Launcher 启动器位置

问题:如何将 Ubuntu 16.04 屏幕左侧的 Launcher 启动器由屏幕底部移动到屏幕左侧。 Ubuntu 16.04 最新的 unity-tweak-tool 工具,已经为用户提供了通过图形界面,实现上述 Launcher 启动器位置移动的功能。 1、在终端中执行: sudo …

python求助神器_python三大神器

Python 中有很多优秀的包,本文主要讲一下 pip, virtualenv, fabric1. pip 用来包管理1 #安装,可指定版本号2 (sudo) pip install Django1.6.834 #升级5 (sudo) pip install bpython --upgrade67 #一次安装多个8 (sudo) pip install BeautifulSoup4 fabri…

滴滴自动驾驶CEO张博:十年内无人驾驶对消费者没有吸引力丨厚势汽车

来源:WAVE2019张博:在 2012 年滴滴创立的时候,我们是一个非常简单的想法。我们发现在打出租车的场景下,无论是司机还是乘客效率都非常低。在滴滴出现之前,一个乘客想要打出租车必须要下楼招一下手,这个信号…

garch预测 python_数据科学方面的Python库,实用!

作者:Python开发与大数据人工智能原文:公众号 Python开发与大数据人工智能Python是一种很棒的编程语言。事实上,它还是世界上发展最快的编程语言之一。它一次又一次证明了它在数据科学职位中的实用性。整个Python及其库的生态系统使其成为全世…

纯js实现html转pdf

项目开发中遇到了一个变态需求,需要把一整个页面导出为pdf格式,而且要保留页面上的所有的表格、svg图片和样式。 简而言之,就是希望像截图一样,把整个页面截下来,然后保存成pdf。 咋不上天呢…… 查了一下,…

java 判断是linux系统_java判断是window系统还是Linux系统,并获取其IP地址及文件上传 | 学步园...

这是upload类的方法:public class Upload {public static String upload(FormFile formfile,String dirPath,int port){String savePath"";String ip"";try{String filename formfile.getFileName().trim(); // 文件名if (!"".equal…

物联网中的推荐系统

来源:北京物联网智能技术应用协会作者 | Alexander Felfernig, Seda Polat Erdeniz编译 | CDA数据科学研究院Recommender systems in the Internet of Things1、背景介绍物联网是一种联网的基础架构,是物联网、互联网和语义学领域之间融合的结果&#xf…

pwm控制的基本原理_单片机PWM控制基本原理详解~

PWM是Pulse Width Modulation的缩写,它的中文名字是脉冲宽度调制,一种说法是它利用微处理器的数字输出来对模拟电路进行控制的一种有效的技术,其实就是使用数字信号达到一个模拟信号的效果。这是个什么概念呢?我们一步步来介绍。首…

关上Deepfake的潘多拉魔盒,RealAI推出深度伪造视频检测工具

诞生之初,Deepfake是一项有趣的图像处理技术,仅仅带来搞笑和娱乐视频,但殊不知,潘多拉魔盒就此被打开,催生出色情黑产、恶搞政客“操纵”民意,Deepfake正逐步进化为一种新型“病毒”,人类伦理道…

java 解析 csv_在Java中将数据从CSV解析到数组

我正在尝试将CS​​V文件导入到可以在Java程序中使用的数组中. CSV文件已成功导入自身,输出显示在终端上,但它会引发错误:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1at CompareCSV.main(CompareCSV.java:19)在末尾.另外,当…

python画国际象棋_python图形工具turtle绘制国际象棋棋盘

本文实例为大家分享了python图形工具turtle绘制国际象棋棋盘的具体代码,供大家参考,具体内容如下#编写程序绘制一个国际象棋的棋盘import turtleturtle.speed(30)turtle.penup()off Truefor y in range(-40, 30 1, 10):for x in range(-40, 30 1, 10)…

谷歌地图的全球森林监察系统,揭秘中国雾霾的惊天秘密!

来源:老牛时评谷歌公司最近推出的全新交互式地图——“全球森林监察”它可以实时显示全球森林的覆盖情况。该幅地图的数据来源有多个,其中包括了NASA的森林面积覆盖率的分析数据。于是我们选取了中国及中国周边的部分,看完后的感受只能是比悲…

dbref java_查询mongodb dbref内部字段

我需要隐藏其isActive标志设置为false的所有用户相关数据 . 有许多集合我使用了DBRef类型的用户集合(大约14个集合),每个集合包含超过1000万条记录 .让我借助例子更恰当地解释一下 .假设我有两个集合:用户联系用户集包含以下字段:名字(字符串…

qt显示rgba8888 如何改 frame_Qt开源作品17-IP地址输入控件

一、前言这个IP地址输入框控件,估计写烂了,网上随便一搜索,保证一大堆,估计也是因为这个控件太容易了,非常适合新手练手,一般的思路都是用4个qlineedit控件拼起来,然后每个输入框设置正则表达式…

web.xml文件头出错

原先将web.xml文件头设置为如下格式 <?xml version"1.0" encoding"UTF-8"?><web-app version"3.1" xmlns"http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:sche…

Nature子刊超越诺贝尔经典理论:神经科学研究路漫漫...

科学家正在观察一台用于记录小鼠脑细胞活动的双光子显微镜。图片来源&#xff1a;艾伦研究所来源&#xff1a;中国生物技术网 北京时间12月17日&#xff0c;发表在《Nature Neuroscience》上一项针对小鼠视觉系统中近6万个神经元活动的新研究显示&#xff0c;要想了解大脑如何计…

java 替换多个字符串_Java一次(或以最有效的方式)替换字符串中的多个不同子字符串...

小编典典如果你要处理的字符串很长&#xff0c;或者你要处理许多字符串&#xff0c;那么使用java.util.regex.Matcher可能是值得的(这需要花很长时间进行编译&#xff0c;因此效率不高) (如果你的输入很小或搜索模式经常更改)。以下是一个完整的示例&#xff0c;基于从地图中获…

python输出子列表_python利用递归函数输出嵌套列表的每个元素

递归函数实现&#xff1a;defgetitem(l):for item inl:ifisinstance(item,list):getitem(item)else:print(item)getitem(l)输出:12345678910变式1&#xff1a;遇到类表就缩进一次&#xff1a;def getitem(l,level0):for item in l:if isinstance(item,list):getitem(item,level…

偏见与人类大脑结构有关

来源&#xff1a;科技日报偏见是如何产生的&#xff1f;据英国《自然神经科学》16日发表的一项脑科学研究发现&#xff0c;内侧前额叶皮质后部&#xff08;pMFC&#xff09;会促进人类产生确认偏误。具体而言&#xff0c;对于那些不会让自己更加相信已有观念的意见&#xff0c;…