空 ResultSet 仍评估为真,JDBC
Empty ResultSet still evaluating to true, JDBC
我写了一个简单的检查方法来检查给定字符串 id 的 MySQL 数据库中是否存在数据:
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 确认 table 中没有我请求的 ID 的数据(实际上根本没有数据),但条件正在评估为真的。
这是 ResultSet 的调试输出:
起初,"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:
我不知道这是怎么回事,因为我可以确认 table 中不存在任何行甚至任何数据。我错过了什么?
因为您在 SQL 中进行了计数,并且 COUNT 始终有一个结果(一行),在您的情况下为 0。无论如何,我可能会将您的查询写为
SELECT * FROM basic_etf_data WHERE etf_name = ? LIMIT 1
我写了一个简单的检查方法来检查给定字符串 id 的 MySQL 数据库中是否存在数据:
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 确认 table 中没有我请求的 ID 的数据(实际上根本没有数据),但条件正在评估为真的。 这是 ResultSet 的调试输出:
起初,"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:
我不知道这是怎么回事,因为我可以确认 table 中不存在任何行甚至任何数据。我错过了什么?
因为您在 SQL 中进行了计数,并且 COUNT 始终有一个结果(一行),在您的情况下为 0。无论如何,我可能会将您的查询写为
SELECT * FROM basic_etf_data WHERE etf_name = ? LIMIT 1