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

Posted

技术标签:

【中文标题】索引处缺少 IN 或 OUT 参数:: Java、Oracle 中的 1 个错误【英文标题】:Missing IN or OUT parameter at index:: 1 error in Java, Oracle 【发布时间】:2014-12-07 12:44:51 【问题描述】:

您好,我使用 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;

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

【问题讨论】:

【参考方案1】:

错误信息中的“Missing IN or OUT parameter”是针对查询中的?

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

【讨论】:

感谢您的关注。我是这样写的 'BookidPs = con.prepareStatement("SELECT TITLE FROM BOOK AND BORROWER WHERE ?=?"); BookidPs.setString(1, book.getIsbn()); BookidPs.setString(2, bookid);'但是这次我得到了 HTTP Status 500 - ORA-00933: SQL command not properly end 错误。如果这种方式效率不高,请告诉我如何解决这个问题。如何使用图书 ID 打印图书名称。 ?=? 不正确。不能以这种方式参数化列名。您只能在右侧表达式中使用? 因为我想在 Borrowers 屏幕中显示借来的书名。我试过 BookidPs = con.prepareStatement("SELECT TITLE FROM BOOK AND BORROWER WHERE ISBN=?"); BookidPs.setString(1, bookid);与前一个相同的错误。 在 Book 表中有书籍名称,在 Borrower 表中有需要的书籍 ID。我想到达 ISBN 以便在 Borrower 表中使用 Book id 来预订名称。现在我只能在借款人屏幕上显示 bookid。 谢谢我看到了。这有帮助,这是正确的陈述,但现在我应该将查询结果添加到名为 liste 的列表项中。它携带打印值查看您知道的。如何将其添加到列表中

以上是关于索引处缺少 IN 或 OUT 参数:: Java、Oracle 中的 1 个错误的主要内容,如果未能解决你的问题,请参考以下文章

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

错误报告:索引处缺少 IN 或 OUT 参数: : 1. 我该如何解决?

以下错误是啥意思:java.sql.sqlexception 在索引处缺少输入或输出参数

ibatis中的参数语法

java.sql.SQLException: 索引中丢失 IN或OUT 参数::x

java.sql.SQLException: 索引中丢失 IN 或 OUT 参数:: x