web-dev-qa-db-ja.com

インデックスにINまたはOUTパラメータがありません:Java、Oracleで1エラー

こんにちは、Netbeans 8.0.2とOracle 11g Express Editionを使用して、JSF 2.2でライブラリ管理システムをコーディングしました。 Books、Borrowersなどの名前のページがいくつかあり、データベースに同じ名前のテーブルがいくつかあります。私の問題はこれです:借り手画面に本のIDが表示されます。しかし、私は同じIDを持つ本のタイトルに到達したいです。これが私のコードです。

public List<Borrower> getBorrowers()throws ClassNotFoundException,SQLException, InstantiationException, IllegalAccessException{
    Class.forName("Oracle.jdbc.driver.OracleDriver");
    con=DriverManager.getConnection("jdbc:Oracle:thin:@localhost:1521:XE","Alparslan-PC","123456");
    ps=con.prepareStatement("SELECT * FROM BORROWER");

    BookidPs = con.prepareStatement("SELECT TITLE FROM BOOK AND BORROWER WHERE ISBN=?");


    ResultSet rs=ps.executeQuery();
    ResultSet Rs2=BookidPs.executeQuery();
    List<Borrower> liste = new ArrayList<Borrower>();
    while(rs.next()){

        Borrower borrow = new Borrower();
        borrow.setId(rs.getBigDecimal("ID"));
        borrow.setName(rs.getString("NAME"));
        borrow.setSurname(rs.getString("SURNAME"));
        borrow.setAddress(rs.getString("ADDRESS"));
        borrow.setPhonenumber(rs.getString("PHONENUMBER"));
        borrow.setBorrowdate(rs.getString("BORROWDATE"));
        //book.setIsbn(rs.getString("BOOKID"))
        borrow.setBookid(Rs2.getString("BOOKID"));
        //borrow.setBookid(((Book) rs.getObject("BOOKID")).getIsbn());
        liste.add(borrow);
    }
    System.out.print(liste);
    return liste;
}

borrow.setBookid(rs.getString( "BOOKID"))で行22が変更された場合;ブックIDが表示されます。 BookidPsという別のクエリを作成しました。このプログラムを実行すると、index :: 1エラーでINまたはOUTパラメーターが欠落します。助けていただければ感謝します。ありがとう

7
Alp

エラーメッセージの「INまたはOUTパラメータがありません」は、?クエリ内:

SELECT TITLE FROM BOOK AND BORROWER WHERE ISBN=?

値を指定しませんでした。このようにしてみてください:

BookidPs = con.prepareStatement("SELECT TITLE FROM BOOK AND BORROWER WHERE ISBN=?");
BookidPs.setString(1, theIsbn);

クエリにはISBNパラメータが必要ですが、コードのどこにそのような変数があるのか​​わかりません。このクエリを使用するには、不足しているパラメーターを指定する必要があります。実際、この2番目のクエリはまったく役に立たないようです。コードを考えると、rsから値を取得する代わりにこのクエリを使用する理由がわかりません。

しかし、実際には、そのパラメーターが入力されていても、クエリは無効なSQLです。

おそらく1つのクエリ、JOINだけが必要だと思います。 2番目のクエリは、BOOKテーブルからTITLEを選択しようとしているようです。したがって、パラメータなしでこのクエリが必要な場合があります。

SELECT * FROM BORROWER JOIN BOOK ON BORROWER.BOOKID = BOOK.BOOKID
14
janos