web-dev-qa-db-fra.com

Paramètre IN ou OUT manquant à l'erreur index :: 1 dans Java, Oracle

Salut, j'ai codé un système de gestion de bibliothèque dans JSF 2.2 en utilisant Netbeans 8.0.2 et Oracle 11g Express Edition. J'ai plusieurs pages nommées Books, Borrowers etc. et quelques tables nommées de la même manière dans la base de données. Mon problème est le suivant: dans l'emprunteur, les identifiants des livres d'écran s'affichent. Mais je veux atteindre les titres de livres qui ont le même identifiant. Voici mon code.

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;
}

si la ligne 22 a changé avec borrow.setBookid (rs.getString ("BOOKID")); Les bookids sont affichés. J'ai écrit une autre requête nommée BookidPs. si j'exécute ce programme, j'obtiens le paramètre IN ou OUT manquant à l'erreur index :: 1. Si vous aidez, j'apprécierai. Merci

7
Alp

Le "paramètre IN ou OUT manquant" dans le message d'erreur est pour le ? dans la requête:

SELECT TITLE FROM BOOK AND BORROWER WHERE ISBN=?

Vous n'avez pas fourni de valeur pour cela. Essayez comme ceci:

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

La requête a besoin d'un paramètre ISBN, mais je ne vois pas où vous avez une telle variable dans votre code. Pour utiliser cette requête, vous devez fournir le paramètre manquant. En fait, il semble que cette deuxième requête ne vous soit pas du tout utile. Étant donné le code, je ne vois pas pourquoi vous souhaitez utiliser cette requête au lieu d'obtenir la valeur de rs.

Mais en fait, même avec ce paramètre rempli, la requête n'est pas valide SQL.

Je pense que vous voulez probablement une seule requête, un JOIN. Votre deuxième requête semble essayer de sélectionner le TITRE dans la table LIVRE. Alors peut-être que vous voulez cette requête, sans paramètres:

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