您好我使用Netbeans 8.0.2和Oracle 11g Express Edition在JSF 2.2中编写了一个库管理系统。我有几个名为Books,Borrowers等的页面和一些在数据库中命名相同的表。我的问题是:在Borrowers中显示屏幕书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(&#34; BOOKID&#34;));显示了bookids。我写了另一个名为BookidPs的查询。如果我运行这个程序,我会在index :: 1错误时得到Missing IN或OUT参数。如果你帮助我会好意思。感谢
答案 0 :(得分:12)
&#34;缺少IN或OUT参数&#34;在错误消息中是查询中的?
:
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