gpt4 book ai didi

java - 空 ResultSet 仍在评估为真,JDBC

转载 作者:太空宇宙 更新时间:2023-11-03 11:45:29 25 4
gpt4 key购买 nike

我编写了一个简单的检查方法来检查 MySQL 数据库中是否存在给定字符串 ID 的数据:

    public boolean checkForData(String etfSymbol){
try (Connection conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD)) {
if (conn != null) {
PreparedStatement statement = conn.prepareStatement(CHECK_FOR_DATA);
statement.setString(1, etfSymbol);
ResultSet result = statement.executeQuery();
if (!result.isBeforeFirst()){
System.out.println("No data currently in database for this ETF");
return false;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("Data already exists in database for this ETF");
return true;
}

查询:

    final String CHECK_FOR_DATA = "SELECT COUNT(*) FROM basic_etf_data WHERE etf_name = (?)"

我可以通过 MySQL Workbench 确认表中没有我请求的 ID 的数据(实际上根本没有数据),但条件评估为真。这是 ResultSet 的调试输出:

first-half second-half

起初,“InvalidRowReason”让我相信它正在评估为真,因为索引实际上在第一个之前,但 isBeforeFirst() 的文档状态:

true if the cursor is before the first row; false if the cursor is at any other position or the result set contains no rows

然后我扩展了 rowData,发现大小等于 1:

row data

我不知道这是怎么回事,因为我可以确认表中不存在任何行甚至任何数据。我错过了什么?

最佳答案

因为你在 SQL 中创建一个 COUNT 并且 COUNT 总是一个结果(一行),在你的情况下是 0。无论如何,我可能会把你的查询写成

SELECT * FROM basic_etf_data WHERE etf_name = ? LIMIT 1

关于java - 空 ResultSet 仍在评估为真,JDBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39184747/

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