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

时间:2014-12-07 12:44:52

标签: 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;
}

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

1 个答案:

答案 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