gpt4 book ai didi

java - ResultSet 不为 null,但 resultset.next() 返回 false

转载 作者:行者123 更新时间:2023-12-01 19:58:25 27 4
gpt4 key购买 nike

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

代码:

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;
}

我认为引用的是:

Similar Stack Overflow question

Check for emptyResultSet

Similar Java Forums question

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

最佳答案

您似乎假设此方法返回 null如果没有行,则情况并非如此。方法 executeQuery() 永远返回null *。 API文档具体说:

Returns:
a ResultSet object that contains the data produced by the query; never null

所以,你的null -检查完全没有必要。它要么生成一个结果集(即使查询没有生成任何行),要么抛出 SQLException 。例如,语法错误,或者执行的语句不产生结果集(例如更新或删除语句)。

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

我认为您对 API 的假设是不正确的。我建议你仔细阅读 JDBC API 文档,也许还可以阅读一些有关 JDBC 的教程或介绍性文本。

如果 SQL Developer 显示了一行,而您的代码没有显示,请仔细检查 1) 您是否确实使用相同的数据库,2) 使用的 ID 是否确实相同,以及 3) 您在 SQL 中查看的数据是否相同开发商确实 promise 了。首先考虑简化查询,例如仅从一个表中选择,删除此订单号上的特定条件以便选择所有行,使用在 SQL Developer 中使用的相同文字值(在查询中硬编码)等。另外,您确定您使用的条件正确,PPS_NUM看起来不像Order_id ,而例如 ORD_ID看起来更像是一个。

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

关于java - ResultSet 不为 null,但 resultset.next() 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48695778/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com