Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2017
    Messaggi
    23

    [java] Estrazione stringhe da database

    Buonasera a tutti, scrivo perchè ho un problema con un programma in Java. E' una sorta di Login client/server; ho collegato il database e scritto i metodi. Quando vado a fare il controllo per verificare che username e password siano giusti, quest'ultimo non funziona, rilasciandomi un "null" nel client. la stringa per il controllo è questa:
    if(username.equals(rs.getString("user")) &&password.equals(rs.getString("pass"))){
    //
    }

    rs è ResultSet.


    rs = stmt.executeQuery("SELECT * from users");
    Qui eseguo la query per estrarre i campi.



    Qualcuno sa come aiutarmi?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da abab Visualizza il messaggio
    Qualcuno sa come aiutarmi?
    È un po' poco scritto così. Mostra un po' più di codice altrimenti non si capisce bene cosa hai fatto.

    P.S. per cortesia, non postare codice "colorato". Metti il codice puro tra i tag [CODE] ..... [/CODE]
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2017
    Messaggi
    23
    Certamente; intanto mi spiego meglio. Incollo un po di codice:
    codice:
    rs = stmt.executeQuery("SELECT * from users");                while(rs.next())
                    {
                        System.out.println("id: " + rs.getString("id"));
                        System.out.println("user: " + rs.getString("user"));
                        System.out.println("password: " + rs.getString("password"));


    Con questa stringa riesco a stampare a video i risultati che richiedo (id, username, password dal database). Solo che quando richiamo "
    rs.getString("user")" mettendolo nel IF per vedere se i dati inseriti e quelli all' interno del database coincidono non funziona, mandando a video un bellissimo "null". Preciso che mettendo nell' IF due variabili dichiarate con dei dati esempio (esempio. user = paolo password = paolo11) il sistema funziona correttamente. Spero di essermi spiegato meglio.

    PS: Copio e incollo direttamente da Eclipse, perdona il colore

    EDIT: posto anche l'errore
    java.sql.SQLException: Operation not allowed after ResultSet closed
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl.java:794)
    at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1105)
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5610)

    Ultima modifica di abab; 08-06-2017 a 21:33

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da abab Visualizza il messaggio
    Certamente; intanto mi spiego meglio. Incollo un po di codice:
    Ancora poco. E ribadisco, non postare codice "colorato". (non copiare da un IDE ma da un editor di testo puro)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Dall'eccezione sembra che tu stia cercando di leggere i dati dal ResultSet dopo che questo è stato chiuso.
    Un ResultSet può risultare chiuso in 3 casi:

    1) Dopo una esplicita chiamata a rs.close();
    2) Dopo una esplicita chiamata a stmt.close(); (dove stmt è lo Statement che l'ha generato)
    3) Dopo una esplicita chiamata a con.close(); (dove con è la Connection al database)

    Esiste anche una quarta possibilità (non ricordo, però, se effettivamente l'Exception sollevata sia quella o altra simile), ma non credo sia il tuo caso (almeno non ho elementi per poterlo supporre, visto che il codice postato è effettivamente troppo poco).

    Ad ogni modo un consiglio: nel while() in cui scorri il ResultSet prima di tutto dovresti leggere i valori dal ResultSet e memorizzarli all'interno di variabili / beans. Dopodichè tutte le elaborazioni sui valori falle direttamente sulle variabili / beans, non più sul ResultSet. Ossia:

    codice:
    while( rs.next() ) {
       // Prima leggo il ResultSet
       String id = rs.getString("id");
       String user = rs.getString("user");
       String pwd = rs.getString("password");
    
       // Le elaborazioni ora le faccio sulle variabili e non più sul ResultSet (questo non lo tocco più)
       if (username.equals(user) && password.equals(pwd) ... ) {
          ...
       }
    }
    Questo ti evita un sacco di problemi subdoli dovuti a "particolarità" dipendenti dal DBMS...


    Ciao.
    Ultima modifica di LeleFT; 09-06-2017 a 09:06
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2017
    Messaggi
    23
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Dall'eccezione sembra che tu stia cercando di leggere i dati dal ResultSet dopo che questo è stato chiuso.
    Un ResultSet può risultare chiuso in 3 casi:

    1) Dopo una esplicita chiamata a rs.close();
    2) Dopo una esplicita chiamata a stmt.close(); (dove stmt è lo Statement che l'ha generato)
    3) Dopo una esplicita chiamata a con.close(); (dove con è la Connection al database)

    Esiste anche una quarta possibilità (non ricordo, però, se effettivamente l'Exception sollevata sia quella o altra simile), ma non credo sia il tuo caso (almeno non ho elementi per poterlo supporre, visto che il codice postato è effettivamente troppo poco).

    Ad ogni modo un consiglio: nel while() in cui scorri il ResultSet prima di tutto dovresti leggere i valori dal ResultSet e memorizzarli all'interno di variabili / beans. Dopodichè tutte le elaborazioni sui valori falle direttamente sulle variabili / beans, non più sul ResultSet. Ossia:

    codice:
    while( rs.next() ) {
       // Prima leggo il ResultSet
       String id = rs.getString("id");
       String user = rs.getString("user");
       String pwd = rs.getString("password");
    
       // Le elaborazioni ora le faccio sulle variabili e non più sul ResultSet (questo non lo tocco più)
       if (username.equals(user) && password.equals(pwd) ... ) {
          ...
       }
    }
    Questo ti evita un sacco di problemi subdoli dovuti a "particolarità" dipendenti dal DBMS...


    Ciao.

    Grazie mille, in effetti avevo messo con.close()!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.