Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Oracle 11g XE数据库的JSF 2.2中的SQL连接查询错误_Java_Sql_Oracle_Join_Jdbc - Fatal编程技术网

Java 使用Oracle 11g XE数据库的JSF 2.2中的SQL连接查询错误

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<

大家好,我正在使用JSF2.2和Oracle XE 11g数据库编写一个图书馆管理系统。我有单独的表,如借书人图书等,当然还有一些网页,如借款人.xhtml和图书.xhtml。在我的借贷者表中,您是一个名为Bookid的外键。它引用Book表的主键Id。它们都是Number5类型的属性。我想展示人们借来的书名。现在我只能显示bookid s。我编写了一个连接sql,但这不起作用。我在图书名称行[DataPackage.book[isbn=null]]中有以下代码:

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。我已经这样做了。但结果是一样的。没有什么变化。我不明白。我有书,我有借书人,但我不能只显示他们的名字。有趣的