2014-12-07 149 views
2

您好我使用Netbeans 8.0.2和Oracle 11g Express Edition在JSF 2.2中編寫圖書館管理系統。我有幾個名爲Books,Borrowers等的頁面和一些在數據庫中名稱相同的表。我的問題是這樣的:在借用者屏幕上顯示書籍ID。但我想要達到具有相同標識的圖書標題。這是我的代碼。在Java,索引:: 1錯誤缺少IN或OUT參數

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; 
} 

if line 22 changed with borrow.setBookid(rs.getString(「BOOKID」));顯示書目。我寫了另一個名爲BookidPs的查詢。如果我運行這個程序,我會在index :: 1錯誤處得到Missing IN或OUT參數。如果你幫忙,我會很滿意。由於

回答

8

的錯誤消息 「丟失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參數,但我沒有看到你的代碼中有這樣的變量。 要使用此查詢,您需要提供缺少的參數。事實上,看起來第二個查詢對你來說根本沒有用處。鑑於代碼,我不明白你爲什麼要使用這個查詢,而不是從rs獲取值。

但實際上,即使填充了該參數,查詢也是無效的SQL。

我想你可能只想要一個查詢,一個JOIN。 您的第二個查詢似乎嘗試從BOOK表中選擇TITLE。 所以也許你想這個查詢,沒有參數:

SELECT * FROM BORROWER JOIN BOOK ON BORROWER.BOOKID = BOOK.BOOKID 
+1

感謝您的關注。我用這種方式寫了 'BookidPs = con.prepareStatement(「SELECT TITLE FROM BOOK AND BORROWER WHERE?=?」); BookidPs.setString(1,book.getIsbn()); BookidPs.setString(2,bookid);' 但在這段時間我得到HTTP狀態500 - ORA-00933:SQL命令沒有正確結束的錯誤。如果這種方式效率不高,請告訴我如何實現這個問題。如何使用書籍ID打印書名。 – Alp 2014-12-07 13:05:37

+1

'?=?'不正確。列名不能以這種方式參數化。只能在右側表達式中使用'?'。 – janos 2014-12-07 13:08:45

+1

因爲我想顯示借用者屏幕中借用的圖書名稱。我試過 BookidPs = con.prepareStatement(「SELECT TITLE FROM BOOK AND BORROWER WHERE ISBN =?」); BookidPs.setString(1,bookid);與前一個相同的錯誤。 – Alp 2014-12-07 13:16:39

相關問題