准备语句

时间:2015-08-28 12:37:10

标签: java sql jdbc

我正在尝试在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;


    }

1 个答案:

答案 0 :(得分:3)

您正在调用prepareStatement两次,在第一个上设置参数,然后在第二个上调用executeQuery

目前尚不清楚您宣布statementresultSet的事件的位置,但您想要:

PreparedStatement preparedStmt = connection.prepareStatement(stmt); 
preparedStmt.setString(1, key);
ResultSet resultSet = preparedStmt.executeQuery();

请注意,我已将resultSet设为局部变量 - 您真的不希望它成为一个字段...您也没有理由选择temp变量,因为您可以直接返回来自while循环。 (我已将代码更改为使用setString而不是setObject,也是......)

您应该使用try-with-resources语句自动关闭语句和结果集...)

相关问题