索引处缺少 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 在索引处缺少输入或输出参数