簡體   English   中英

Prepared語句中的參數未設置錯誤

[英]Parameter not set error in Prepared statement

我試圖在JDBC中執行准備好的語句,每次執行該語句時,都會收到錯誤消息“未設置參數”。 我已經反復嘗試檢查未設置的參數-但我只有一個。 這使我相信這是我自己的另一個愚蠢的錯誤。

如果您能向我指出這一點,我將非常感謝

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;


    }

您要調用prepareStatement兩次,在第一個參數上設置參數,然后在第二個參數上調用executeQuery

目前尚不清楚事件聲明statementresultSet在哪里,但您需要:

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

請注意,我已經將resultSet為局部變量-您真的不希望它成為字段...也沒有理由要使用temp變量,因為您可以直接從while循環中返回。 (我也將代碼更改為使用setString而不是setObject ……)

您應該使用try-with-resources語句自動關閉該語句和結果集...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM