嗨,我使用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; }
如果第22行更改为rowe.setBookid(rs.getString(“ BOOKID”)); 显示书本。我写了另一个名为BookidPs的查询。如果我运行此程序,则会在index :: 1错误处获得Missing IN或OUT参数。如果您有帮助,我将不胜感激。谢谢
错误消息中的“缺少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。
rs
但是实际上,即使填充了该参数,查询也是无效的SQL。
我认为您可能只需要一个查询,即JOIN。您的第二个查询似乎试图从BOOK表中选择TITLE。因此,也许您希望此查询不带参数:
SELECT * FROM BORROWER JOIN BOOK ON BORROWER.BOOKID = BOOK.BOOKID