edit2:我写过这个方法来解决问题:
public boolean codeExists(int code) {
final String SELECT_QUERY = "SELECT * FROM productcatalogue WHERE code = ?";
try {
PreparedStatement statement = conn.prepareStatement(SELECT_QUERY); // Create query statement
statement.setInt(1, code);
ResultSet queryResult = statement.executeQuery();
if (!queryResult.next()) { // Check if code entered exists
return false; // Tells that the author doesn't exist
}
} catch (SQLException sqlException) {
sqlException.printStackTrace();
}
return true; //Otherwise the item exists
}
编辑:我现在知道ResultSet永远不会返回null。它将返回一个空的ResultSet。
我有一个包含7行的数据库,每行有4列。我提示用户输入代码,我需要交叉引用数据库以查看输入的代码是否等于数据库中的一个代码(每行的第一列)。
首先,我正在检查结果集是否为null,但这不起作用。我正在尝试if(rs.wasNull())
但它似乎永远不会执行。
对于解决我的问题有什么看法吗?如果有帮助的话,这是一个代码片段。
if(!rs.wasNull()) {
while(rs.next()) {
Products temp = new Products(rs.getString(1), rs.getString(2), rs.getDouble(3), rs.getBoolean(4));
productsList.add(temp);
// For testing purposes
//out.println(temp.toString());
request.setAttribute("productsList", productsList);
request.getRequestDispatcher("Scan.jsp").forward(request, response);
}
}
else if(rs.wasNull()) {
Products wrongCode = null;
productsList.add(wrongCode);
request.setAttribute("productsList", productsList);
request.getRequestDispatcher("Scan.jsp").forward(request, response);
}
答案 0 :(得分:0)
如果结果为空,则永远不会进入while
循环。这是用于分离代码逻辑的条件。在结果集上调用其他代码是没用的。
您应该检查ResultSet#wasNull()
的jdbc api:
wasNull boolean wasNull() 抛出SQLException 报告最后一列读取的值是否为SQL NULL。请注意,您必须首先调用列上的其中一个getter方法以尝试读取其值,然后调用方法wasNull以查看读取的值是否为SQL NULL。 返回: 如果读取的最后一列值为SQL NULL,则为true,否则为false 抛出: SQLException - 如果发生数据库访问错误或在关闭的结果集上调用此方法