我正在尝试在JDBC中执行预准备语句,每次执行它时都会收到错误消息“Paramater not set”。 我已经多次尝试检查未设置的参数 - 但我只有一个。这让我相信这是我的另一个愚蠢的错误。
如果你能指出这一点,我将非常感激
public book search(String key){
book temp = null;
try {
String stmt = "SELECT BookID, Title, Author, Media, Available FROM BOOK WHERE Title LIKE ?;";
connection = DatabaseConnection();
PreparedStatement preparedStmt = connection.prepareStatement(stmt);
System.out.println(key);
preparedStmt.setObject(1, key);//the name
statement = connection.prepareStatement(stmt); //Using Prepared Statements prepare the query
resultSet = statement.executeQuery(); //Execute the query
while (resultSet.next()) {
int bookID = resultSet.getInt("BookID");//Get the userName
String title = resultSet.getString("Title"); //Get the score
String author = resultSet.getString("Author"); //Get the score
String media = resultSet.getString("Media"); //Get the score
boolean available = resultSet.getBoolean("Available"); //Get the score
temp = new book(title,author,media,available,bookID);
}
connection.close(); //close connection
} catch (SQLException e) {
System.err.println("Got an exception!");
System.err.println(e.getMessage());
}
return temp;
}
答案 0 :(得分:3)
您正在调用prepareStatement
两次,在第一个上设置参数,然后在第二个上调用executeQuery
。
目前尚不清楚您宣布statement
或resultSet
的事件的位置,但您想要:
PreparedStatement preparedStmt = connection.prepareStatement(stmt);
preparedStmt.setString(1, key);
ResultSet resultSet = preparedStmt.executeQuery();
请注意,我已将resultSet
设为局部变量 - 您真的不希望它成为一个字段...您也没有理由选择temp
变量,因为您可以直接返回来自while
循环。 (我已将代码更改为使用setString
而不是setObject
,也是......)
您应该使用try-with-resources语句自动关闭语句和结果集...)