小编典典

在索引处缺少IN或OUT参数:Java,Oracle中出现1个错误

sql

嗨,我使用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参数。如果您有帮助,我将不胜感激。谢谢


阅读 231

收藏
2021-04-22

共1个答案

小编典典

错误消息中的“缺少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
2021-04-22