Newsgroup: it.comp.java
Titolo: Deve essere una cretinata...aiuto con PreparedStatement

Salve...ho visto che nessuno ha risposto al mio messaggio sulle prepared
statement (a parte che ieri il server infostrada faceva i capricci e io ho
dovuto mandare il mess 3 volte...io lo vedo solo alle 23.38 ma se fosse
arrivato anche nel pomeriggio e qualcuno avesse riposto chiedo di inoltrarmi
gentilmente in casella): forse ero stato troppo vago e avevo messo troppo
codice...
Ora poichč tale tipo di istruzione mi serve anche in altre parti del
programma ho provato ad andare avanti e in questa funzione l'ho cosě
usata...
private String checkpasswd(String u, String p) {
    String pwdDB, tacc;
        ResultSet rsA;
        tacc="";
        rsA=null;
        pwdDB="";
    try   {
        PreparedStatement pst=null;
                ConnettiDB db=new ConnettiDB();
                String query1="SELECT password, tipoaccesso " + "FROM
Password " + "WHERE username = ?";
                pst=db.connection.prepareStatement(query1);
                pst.setString(1,u);
                rsA= pst.executeQuery();
                }
                catch (Exception e) {
                 System.out.println("Errore conn Password : " +
e.getMessage());
                 }
                try {
                    while(rsA.next())
System.out.println(rsA.getString("password") + " " +
rsA.getString("tipoaccesso"));
                    String pw=rsA.getString("password");
                    tacc=rsA.getString("tipoaccesso");
                }
                catch (Exception e) {
                 System.out.println("Errore prendere pwd: " +
e.getMessage());
                 }
    System.out.println(u);
    System.out.println(pwdDB);
    System.out.println(tacc);
     if (p.equals(pwdDB))
     return(tacc);
  else
    {
    tacc="err";
    return(tacc);
}
}
Non funziona perchč viene lanciata la seguente eccezione
Errore prendere pwd: [Microsoft][ODBC Driver Manager] Stato del cursore non
valido.
mauri
Ma la cosa stupefacente č che alla riga while(rsA.next())
System.out.println(rsA.getString("password") + " " +
rsA.getString("tipoaccesso")); viene stampata correttamente la pwd e l'altro
dato mentre poi in due assegnamenti successivi arriva l'errore!
Perchč?? Sto impazzendo
p.s. Spero sia lo stesso errore di ieri!

 dato mentre poi in due assegnamenti successivi arriva l'errore!
Eccecredo! Secondo le specifiche JDBC dovresti leggere i contenuti dei campi una
volta sola e nell'ordine della select per massimizzare la portabilità. Tu invece
hai letto due volte sia la password che il tipo di accesso. Dovresti leggerle
una volta sola e memorizzarle in un paio di stringhe. Dovrebbe essere quanto.
Ciao,
 Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------

Mancano le graffe dopo while (rsA.next())



Inoltre non risolvi niente postando + volte lo stesso messaggio nell'arco di poco tempo:
probabilmente o nessuno sa la risposta o nessuno ha tempo da dedicarti in quel momento.
Ciao,
    Bruno.
---
| Bruno Bossola
| A Java Software Engineer :-)
| 
http://members.xoom.it/bbruno
| 
http://digilander.iol.it/bbossola

 probabilmente o nessuno sa la risposta o nessuno ha tempo da dedicarti in
quel momento.
Ribadisco che purtroppo io non vedo gli altri messaggi perchè deve esserci
stato un problema di server infostrada ieri e io ho postato, ricevuto l'ok
ma non vedo quei messaggi sul ng. Scusate se ho un po' intasato l'ambiente!

Grazie mille...
non avevo compreso questo aspetto delle preparedStatement...ora ho messo a
posto la funzione checkpasswd che citavo prima....adesso mi accingo a
rimettere mano alla classe che citavo nel messaggio precedente: purtroppo ho
idea che lì i problemi siano maggiori perchè c'è quel discorso dei parametri
previsti 2 che proprio non capisco...
Se non riesco a risolverlo mi faro sentire sperando di non essere preso a
sassate
Grazie infinite
PAolo

 previsti 2 che proprio non capisco...
Solitamente quando ti appare Parametri previsti:2 o roba del genere è perchè hai
scitto male il nome di un campo o magari non lo hai incluso tra apici singoli
(se stringa), per cui il motore jet cerca di parsare la stringa, trova qualcosa
che non gli torna e lo prende come se fosse un parametro. Consiglio? Stampa la
stringa su System.out, taglia, nuova query in Access, incolla, prova ad
eseguirla. Dovresti trovare velocemente il misterioso 'parametro mancante'.


Infatti...
c'era un errore di questo tipo...
Poichè le tabelle del db sono in relazione tra loro sbagliavo nei
riferimenti....