Oracle,Oracle中索引:: 1错误时缺少IN或OUT参数

Alp*_*Alp 7 java sql oracle oracle11g

您好我使用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;
}
Run Code Online (Sandbox Code Playgroud)

如果第22行用borrow.setBookid(rs.getString("BOOKID"))更改; 显示了bookids.我写了另一个名为BookidPs的查询.如果我运行这个程序,我会在index :: 1错误时得到Missing IN或OUT参数.如果你帮助我会好意思.谢谢

Sto*_*ica 14

错误消息中的"Missing IN或OUT参数"适用?于查询:

SELECT TITLE FROM BOOK AND BORROWER WHERE ISBN=?
Run Code Online (Sandbox Code Playgroud)

你没有为它提供价值.试试这样:

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

查询需要ISBN参数,但我看不到代码中有这样的变量.要使用此查询,您需要提供缺少的参数.事实上,似乎第二个查询对你完全没用.鉴于代码,我不明白为什么要使用此查询而不是从中获取值rs.

但实际上,即使填充了该参数,查询也是无效的SQL.

我想你可能只想要一个查询,一个JOIN.您的第二个查询似乎尝试从BOOK表中选择TITLE.所以也许你想要这个查询,没有参数:

SELECT * FROM BORROWER JOIN BOOK ON BORROWER.BOOKID = BOOK.BOOKID
Run Code Online (Sandbox Code Playgroud)