Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ResultSet尚未为null ResultSet.next()返回false_Java_Sql_Oracle_Jdbc_Resultset - Fatal编程技术网

Java ResultSet尚未为null ResultSet.next()返回false

Java ResultSet尚未为null ResultSet.next()返回false,java,sql,oracle,jdbc,resultset,Java,Sql,Oracle,Jdbc,Resultset,我试图根据特定的条件搜索表。SQL查询在SQL Developer中执行时返回正确的结果(1行)。在JDBC中,resultset还不是nullresultset.next()返回false 代码: publicstaticarraylistsearchrecords(connectionconn,intorderid)抛出SQLException{ System.out.println(“Order_id:+orderID);//传递了正确的orderID ArrayList searchRe

我试图根据特定的条件搜索表。SQL查询在SQL Developer中执行时返回正确的结果(1行)。在JDBC中,resultset还不是null
resultset.next()
返回false

代码:

publicstaticarraylistsearchrecords(connectionconn,intorderid)抛出SQLException{
System.out.println(“Order_id:+orderID);//传递了正确的orderID
ArrayList searchResult=null;
SearchRecord SearchRecord=null;
PreparedStatement searchpstu=null;
ResultSet search_rs=null;
如果(conn!=null){
//此查询在SQL Developer中成功执行并输出一行
字符串搜索\u sql=“从VD\u SHIP\u AOR a、VD\u BRC\u ORD b、VD\u Consolu\u VALID c、VD\u SHIP d中选择d.PPS\u NUM、a.BRC\u ORD\u ID、项目编号、许可证编号、到期日期、名字、姓氏、地址1、地址2、城市、省、邮政编码,其中a.BRC\u ORD=b.BRC\u ORD和b.BRC\u ORD=b.BRC\u ID=b.BRC\u ID和b.COMolu-ID=c\u-ID=d和b?";
search_pstm=conn.prepareStatement(search_sql);
searchpstm.setInt(1,orderID);
search_rs=searchpstm.executeQuery();
searchResult=newarraylist();
如果(搜索!=null){
System.out.println(“非空”);//打印此
System.out.println(search_rs.isClosed());//Prints false
System.out.println(search_rs.getRow());//打印0
while(search_rs.next()){//没有进入while循环,为什么?
System.out.println(“insidewhilers.next”);
//将结果集的数据存储到arraylist中
}
}
}
返回搜索结果;
}
我想说的是:


但是现有的解决方案不适合我,请帮我解决这个问题

如果没有行,您似乎假设此方法返回
null
,但事实并非如此。该方法将从不返回
null
*。API文档特别指出:

返回:
包含查询生成的数据的
ResultSet
对象从不
null

因此,您的
null
-检查完全没有必要。它将生成一个结果集(即使查询没有生成行),或者抛出一个
SQLException
,例如语法错误,或者如果执行的语句没有生成结果集(例如update或delete语句)

执行后的结果集最初是打开的,并且位于第一行(如果有)之前。如果没有更多行,则调用
ResultSet.next()
返回
false
。在这种情况下,select语句可能没有生成任何行,因此结果集为空,第一次调用
next()
将返回
false

我认为你对API的假设是错误的。我建议您仔细阅读JDBCAPI文档,或者阅读一些关于JDBC的教程或介绍性文本

如果SQL Developer显示了一行,而您的代码没有显示,请仔细检查1)您是否真的使用了相同的数据库,2)使用的id是否真的相同,以及3)您在SQL Developer中查看的数据是否已提交。并考虑首先简化查询,如只从一个表中选择,删除此订单号上的特定条件,以便选择所有行,使用与SQLDead中使用的相同的文字值(查询中的硬编码)等。
PPS\u NUM
看起来不像一个
Order\u id
,而例如
Order\u id
看起来更像一个


*:忽略特定驱动程序实现中出现错误的可能性

您似乎假设如果没有行,此方法将返回
null
,情况并非如此。该方法将从不返回
null
*。API文档特别指出:

返回:
包含查询生成的数据的
ResultSet
对象从不
null

因此,您的
null
-检查完全没有必要。它将生成一个结果集(即使查询没有生成行),或者抛出一个
SQLException
,例如语法错误,或者如果执行的语句没有生成结果集(例如update或delete语句)

执行后的结果集最初是打开的,并且位于第一行(如果有)之前。如果没有更多行,则调用
ResultSet.next()
返回
false
。在这种情况下,select语句可能没有生成任何行,因此结果集为空,第一次调用
next()
将返回
false

我认为你对API的假设是错误的。我建议您仔细阅读JDBCAPI文档,或者阅读一些关于JDBC的教程或介绍性文本

如果SQL Developer显示了一行,而您的代码没有显示,请仔细检查1)您是否真的使用了相同的数据库,2)使用的id是否真的相同,以及3)您在SQL Developer中查看的数据是否已提交。并考虑首先简化查询,如只从一个表中选择,删除此订单号上的特定条件,以便选择所有行,使用与SQLDead中使用的相同的文字值(查询中的硬编码)等。
PPS\u NUM
看起来不像一个
Order\u id
,而例如
Order\u id
看起来更像一个


*:忽略特定驱动程序实现中出现错误的可能性

是否可能您已经在集合中的唯一结果上,并且没有下一条记录?不可能,我正在打开结果集
public static ArrayList<SearchRecord> searchRecords(Connection conn, int orderID) throws SQLException {

    System.out.println("Order_id: " + orderID); //The correct orderID is passed
    ArrayList<SearchRecord> searchResult = null;
    SearchRecord searchRecord = null;
    PreparedStatement search_pstm = null;
    ResultSet search_rs = null;

    if (conn != null) {
        // This query is successfully executed in SQL Developer and outputs a row
        String search_sql = "select d.PPS_NUM, a.BRC_ORD_ID, PROJECT_NUM, LICENSE_NUM, EXPIRY_DATE, FIRST_NAME, LAST_NAME, ADDRESS1, ADDRESS2, CITY, PROVINCE, POSTAL_CODE from VD_SHIP_AOR a, VD_BRC_ORD b, VD_CONSOL_VALID c, VD_SHIP d where a.brc_ord_id = b.brc_ord_id and b.CONSOL_VALID_ID= c.consol_valid_id and a.SHIP_ID = d.SHIP_ID and d.ORD_ID = b.ORD_ID and d.PPS_NUM = ?";
        search_pstm = conn.prepareStatement(search_sql);
        search_pstm.setInt(1, orderID);
        search_rs = search_pstm.executeQuery();
        searchResult = new ArrayList<SearchRecord>();

        if (search_rs != null) {
            System.out.println("Not null"); //Prints this
            System.out.println(search_rs.isClosed()); //Prints false
            System.out.println(search_rs.getRow()); //Prints 0

            while (search_rs.next()) { //Does not enter the while loop, why?
                System.out.println("Inside while rs.next");
                //store resultset's data into arraylist
            }
        }
    }
    return searchResult;
}