Java 使用Oracle 11g XE数据库的JSF 2.2中的SQL连接查询错误
大家好,我正在使用JSF2.2和Oracle XE 11g数据库编写一个图书馆管理系统。我有单独的表,如借书人图书等,当然还有一些网页,如借款人.xhtml和图书.xhtml。在我的借贷者表中,您是一个名为Bookid的外键。它引用Book表的主键Id。它们都是Number5类型的属性。我想展示人们借来的书名。现在我只能显示bookid s。我编写了一个连接sql,但这不起作用。我在图书名称行[DataPackage.book[isbn=null]]中有以下代码:Java 使用Oracle 11g XE数据库的JSF 2.2中的SQL连接查询错误,java,sql,oracle,join,jdbc,Java,Sql,Oracle,Join,Jdbc,大家好,我正在使用JSF2.2和Oracle XE 11g数据库编写一个图书馆管理系统。我有单独的表,如借书人图书等,当然还有一些网页,如借款人.xhtml和图书.xhtml。在我的借贷者表中,您是一个名为Bookid的外键。它引用Book表的主键Id。它们都是Number5类型的属性。我想展示人们借来的书名。现在我只能显示bookid s。我编写了一个连接sql,但这不起作用。我在图书名称行[DataPackage.book[isbn=null]]中有以下代码: public List<
public List<Book> getBookNames(int bookid2)throws ClassNotFoundException,SQLException, InstantiationException, IllegalAccessException{
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","Alparslan-PC","123456");
BookidPs = con.prepareStatement("SELECT DISTINCT TITLE FROM BOOK JOIN BORROWER ON BOOK.ISBN= "+bookid2);
ResultSet Rs2 = BookidPs.executeQuery();
List<Book> liste = new ArrayList<Book>();
while(Rs2.next()){
book.setTitle(Rs2.getString("TITLE"));
liste.add(book);
}
System.out.print(liste);
return liste;
}
我试着把列表变成字符串。删除列表并编写字符串,我尝试了所有操作,但这段代码给出了我在顶部编写的错误。请帮帮我。谢谢。您的ON子句实际上并没有对引用列进行联接。试着这样做:
SELECT DISTINCT b.Title FROM BOOK b
JOIN Borrower bo ON b.id = bo.BookID
WHERE b.ISBN = ?
您可以使用下面的查询
"SELECT DISTINCT book.Title FROM BOOK
JOIN Borrower ON book.isbn= Borrower.BookID
WHERE Nvl (book.isbn,"+bookid2+")="+bookid2
我找到了做这件事的正确方法。感谢@psaraj12,以下是代码:
public String getBookNames(int bookid2)throws ClassNotFoundException,SQLException, InstantiationException, IllegalAccessException{
Book book2 = new Book();
book2.setIsbn(bookid2);
String str = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","Alparslan-PC","123456");
BookidPs = con.prepareStatement("SELECT DISTINCT BOOK.TITLE FROM BOOK " +
"JOIN BORROWER ON BOOK.ISBN= BORROWER.BOOKID " +
"WHERE Nvl (BOOK.ISBN,"+bookid2+")="+bookid2);
ResultSet Rs2 = BookidPs.executeQuery();
while(Rs2.next()){
str = Rs2.getString("TITLE");
}
System.out.print(str);
return str;
}
当我尝试这一点时,我可以显示我的书名。谢谢你的回答,但它是借款人。没有错,请再说一遍。[DataPackage.Book[isbn=null]]。它在Oracle上运行,提供了正确的解决方案,但是。不要在JSF上工作。如果ISBN为null,并且您希望匹配,那么您必须使用的是null而不是=。您的意思是必须使用is null而不是=I deleted=和writed is null而不是=这就是您的意思测试x=null和x!=NULL将始终返回false,如果您想检查x是否为NULL,您必须使用x为NULL或x不为NULL谢谢您的回答,但当我这样写时,我得到了相同的错误。在这片海洋里,没有人知道这一点。什么是Nvl?我已经编辑了Nvl,如果book.isbn有空值,它将返回bookid2。我已经这样做了。但结果是一样的。没有什么变化。我不明白。我有书,我有借书人,但我不能只显示他们的名字。有趣的