1. ホーム
  2. java

[解決済み] インデックスにINまたはOUTパラメータがない::Java、Oracleで1エラー

2022-02-06 21:41:06

質問内容

Netbeans 8.0.2とOracle 11g Express Editionを使用して、JSF 2.2で図書館管理システムをコード化しました。私は本、借り手などの名前のいくつかのページとデータベース内の同じ名前のいくつかのテーブルを持っています。私の問題は次のとおりです: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;
}

22行目を borrow.setBookid(rs.getString("BOOKID")) で変更すると、bookids が表示されます。私はBookidPsという名前の別のクエリを書いた。私はこのプログラムを実行すると、私はインデックスでMissing INまたはOUTパラメータを得る::1エラー。もしあなたが助けてくれるなら、私は感謝します。ありがとうございます。

解決方法を教えてください。

エラーメッセージにある"Missing IN or OUT parameter"とは、以下のようなものです。 ? をクエリに追加してください。

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