索引处缺少 IN 或 OUT 参数:: Java、Oracle 中的 1 个错误

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/27342697/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 04:12:10  来源:igfitidea点击:

Missing IN or OUT parameter at index:: 1 error in Java, Oracle

javasqloracleoracle11g

提问by Alp

Hi I coded a Library Management System in JSF 2.2 with using Netbeans 8.0.2 and Oracle 11g Express Edition. I have several pages named Books, Borrowers etc. and some tables named same in database. My problem is this: in Borrowers screen book ids are displayed. But I want to reach book's titles that have same id. Here is my code.

您好,我使用 Netbeans 8.0.2 和 Oracle 11g Express Edition 在 JSF 2.2 中编写了一个库管理系统。我有几页名为 Books、Borrowers 等,还有一些在数据库中命名的表。我的问题是:在 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;
}

if line 22 changed with borrow.setBookid(rs.getString("BOOKID")); The bookids are shown. I wrote another query named BookidPs. if I run this program I get Missing IN or OUT parameter at index:: 1 error. If you help I will appretiate. Thanks

如果第 22 行更改为borrow.setBookid(rs.getString("BOOKID")); 显示了 bookid。我写了另一个名为 BookidPs 的查询。如果我运行这个程序,我会在 index::1 处得到 Missing IN 或 OUT 参数。如果你帮助我会很感激。谢谢

采纳答案by janos

The "Missing IN or OUT parameter" in the error message is for the ?in the query:

错误消息中的“缺少 IN 或 OUT 参数”是针对?查询中的:

SELECT TITLE FROM BOOK AND BORROWER WHERE ISBN=?
SELECT TITLE FROM BOOK AND BORROWER WHERE ISBN=?

You didn't supply a value for it. Try like this:

您没有为其提供值。像这样尝试:

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

The query needs an ISBN parameter, but I don't see where you have such variable in your code. To use this query, you need to provide the missing parameter. In fact, it seems this second query is not useful for you at all. Given the code, I don't see why you want to use this query instead of getting the value from rs.

该查询需要一个 ISBN 参数,但我没有看到您的代码中哪里有这样的变量。要使用此查询,您需要提供缺少的参数。事实上,这第二个查询似乎对您一点用处都没有。鉴于代码,我不明白您为什么要使用此查询而不是从rs.

But actually, even with that parameter filled, the query is invalid SQL.

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

I think you probably want just one query, a JOIN. Your second query seems to try to select the TITLE from the BOOK table. So maybe you want this query, without parameters:

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

SELECT * FROM BORROWER JOIN BOOK ON BORROWER.BOOKID = BOOK.BOOKID