开源企业网站程序,网站建设与 维护实训报告范文,雅虎搜索,网站建设与推广实训心得jdbc - Java ResultSet如何检查是否有任何结果结果集没有hasNext的方法。 我想检查resultSet是否有任何值这是正确的方法if (!resultSet.next() ) {System.out.println(no data);}kal asked 2019-02-19T19:16:57Z21个解决方案472 votes假设您正在使用新返回的Resul…jdbc - Java ResultSet如何检查是否有任何结果结果集没有hasNext的方法。 我想检查resultSet是否有任何值这是正确的方法if (!resultSet.next() ) {System.out.println(no data);}kal asked 2019-02-19T19:16:57Z21个解决方案472 votes假设您正在使用新返回的ResultSet其光标指向第一行之前更简单的方法是只调用isBeforeFirst()。这样可以避免在需要读取数据时进行回溯。如文档中所述如果游标不在第一个记录之前或者ResultSet中没有行则返回false。if (!resultSet.isBeforeFirst() ) {System.out.println(No data);}Seifer answered 2019-02-19T19:17:54Z209 votes这是正确的最初beforeFirst()的光标指向第一行之前如果第一次调用next()返回false那么ResultSet中没有数据。如果您使用此方法则可能必须在重置之后立即调用beforeFirst()因为它现在已经将自己定位在第一行之外。但应该注意的是Seifer的答案是对这个问题更优雅的解决方案。ninesided answered 2019-02-19T19:17:21Z44 votes你可以随时做前一个然后做一个后循环检查if (!resultSet.next() ) {System.out.println(no data);} else {do {//statement(s)} while (resultSet.next());}Maslow answered 2019-02-19T19:18:19Z19 votes你通常会这样做while ( resultSet.next() ) {// Read the next itemresultSet.getString(columnName);}如果要报告空集请添加一个计算读取项的变量。 如果您只需要阅读单个项目那么您的代码就足够了。kgiannakakis answered 2019-02-19T19:18:52Z8 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:57Z7 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:36Z6 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:09Z5 votes如果您想查看结果集中是否有任何行那将会有效。请注意next()始终移动到下一行因此如果您计划从结果集中进行任何读取则需要将其考虑在内。ResultSet的常用用法(简单阅读时)是while (resultSet.next()){... read from the row here ...}如果您已经调用next()检查结果集是否为空那么显然无法正常工作请注意这一点。 尽管存在“备份”的方法但并不支持所有类型的结果集。Nuoji answered 2019-02-19T19:21:56Z4 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:21Z2 votesif (!resultSet.isAfterLast() ) {System.out.println(No data);}isAfterLast()也为空结果集返回false但由于光标无论如何都在第一行之前这个方法似乎更清楚。Nick Warke answered 2019-02-19T19:22:47Z1 votes要做的最好的事情是检查第一行这样当您打算获取数据时可以避免跳过一行的错误。 类似于if(resultSet.first()){System.out.println(“no data”);}Anthony Oyovwe answered 2019-02-19T19:23:15Z1 votes通过使用resultSet.next()您可以轻松获得结果无论resultSet是否包含任何值ResultSet resultSet preparedStatement.executeQuery();if(resultSet.next())//resultSet contain some valueselse// empty resultSetRam72119 answered 2019-02-19T19:23:42Z1 votesResultSet 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:09Z1 votesResultSet result stmt.executeQuery(sqlQuery);if (!result.next())status ERROR;elsestatus SUCCESS;Deepu Surendran answered 2019-02-19T19:24:29Z1 votes我创建了以下方法来检查ResultSet是否为空。public static boolean resultSetIsEmpty(ResultSet rs){try {// We point the last rowrs.last();int rsRowsrs.getRow(); // get last row numberif (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_SENSITIVEResultSet对象可以在最后移动并返回顶部。 进一步可以捕捉最后的变化CONCUR_READ_ONLY我们可以读取ResultSet对象数据但无法更新。CallableStatement proc dbconex.prepareCall(select, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);Cristian answered 2019-02-19T19:25:22Z1 votesif(resultSet.first) {} else {system.out.println(No raw or resultSet is empty);}因为如果ResultSet没有raw则resultSet.first返回false。user868927 answered 2019-02-19T19:25:49Z0 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:16Z0 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 i1; rs.absolute(i); i){//Code}它将当前行设置为位置i如果该行不存在则将失败。 这只是一种替代方法while(rs.next()){//Code}Andrew answered 2019-02-19T19:26:58Z0 votes我认为检查结果集的最简单方法是通过包org.apache.commons.collections.CollectionUtils下的CollectionUtils。if(CollectionUtils.isNotEmpty(resultList)){/*** do some stuff*/}这将检查null和空结果集条件。有关更多详细信息请参阅以下文档。CollectionUtilsMitul Maheshwari answered 2019-02-19T19:27:38Z0 votes为什么不使用rs.getRow()int getRow()throws SQLExceptionRetrieves 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_ONLYReturns:the current row number; 0 if there is no current rowThrows:SQLException - if a database access error occurs or this method is called on a closed result setSQLFeatureNotSupportedException - if the JDBC driver does not support this methodSince: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