Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    37

    [Java] errore nel prelevare i dati

    salve ragazzi ho un problema con questa porzione di codice, in quanto ogni volta che la eseguo il programma si interrompe. Logicamente mi sembra corretta, ma magari è presente qualche errore che non vedo.
    Ecco il codice

    codice:
     Statement environment = database.createStatement();            ResultSet queryEnvironment = environment.executeQuery("select rowid, * from environment where processed = 0");
               
                List<Measurement> arrayEnvironment = new LinkedList<>();
                List<Integer> environmentRowId = new ArrayList<>();
    
    
                while(queryEnvironment.next()){
                    environmentRowId.add(queryEnvironment.getInt("rowid"));
                    Measurement environmentMeasurement = new Environment(queryEnvironment.getString("identifier"), queryEnvironment.getString("value"), queryEnvironment.getString("date"), queryEnvironment.getLong("milliseconds"));
                    arrayEnvironment.add(environmentMeasurement);
                }
                environment.close();
    Si blocca dentro il while, infatti se aggiungo
    codice:
    System.out.println("prova "+queryEnvironment.getInt("rowid"));
    non mi mostra i risultati, come mai?

    grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da iTuring Visualizza il messaggio
    Si blocca dentro il while
    Cosa vuol dire "si blocca"? Che "salta" via lanciando fuori una eccezione? Se hai una eccezione, dovresti dire quale. Perché dalla eccezione generalmente si capisce cosa è successo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    37
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Cosa vuol dire "si blocca"? Che "salta" via lanciando fuori una eccezione? Se hai una eccezione, dovresti dire quale. Perché dalla eccezione generalmente si capisce cosa è successo.
    si, scusami. volevo dire che salta il resto delle istruzioni e si verifica una eccezione in quanto il codice si trova all'interno di un try catch( SQLException) ... ma non riesco a capire come mai

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da iTuring Visualizza il messaggio
    si, scusami. volevo dire che salta il resto delle istruzioni e si verifica una eccezione in quanto il codice si trova all'interno di un try catch( SQLException) ... ma non riesco a capire come mai
    Vuoi magari dirci quale eccezione? Stack-trace completo, grazie.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    37
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Vuoi magari dirci quale eccezione? Stack-trace completo, grazie.
    codice:
    try{
    log.info("START: DOWNLOAD ENVIRONMENT DATA FROM DATABASE");
                Statement environment = database.createStatement();
                ResultSet queryEnvironment = environment.executeQuery("select rowid, * from environment where processed = 0");
                arraySensor = new ArrayList<>();
                List<Measurement> arrayEnvironment = new LinkedList<>();
                List<Integer> environmentRowId = new ArrayList<>();
                while(queryEnvironment.next()){
                    environmentRowId.add(queryEnvironment.getInt("rowid"));
                    Measurement environmentMeasurement = new Environment(queryEnvironment.getString("identifier"), queryEnvironment.getString("value"), queryEnvironment.getString("date"), queryEnvironment.getLong("milliseconds"));
                    arrayEnvironment.add(environmentMeasurement);
                }
                environment.close();
                log.info("END: DOWNLOAD ENVIRONMENT DATA FROM DATABASE");
    
    }catch(SQLException e) {            log.log(Level.SEVERE, "DATABASE REQUEST ERROR");
            }
    questo è il codice, come faccio a capire quello che mi chiedi?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da iTuring Visualizza il messaggio
    codice:
    log.log(Level.SEVERE, "DATABASE REQUEST ERROR");
    Un log del genere non serve quasi a nulla.

    Mentre:
    log.log(Level.SEVERE, "Download environment data from database failed", e);

    è meglio.

    P.S. dai nomi ho presupposto/dedotto la JUL, Java Util Logging
    Ultima modifica di andbin; 22-03-2018 a 00:27
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    37
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Un log del genere non serve quasi a nulla.

    Mentre:
    log.log(Level.SEVERE, "Download environment data from database failed", e);

    è meglio.

    P.S. dai nomi ho presupposto/dedotto la JUL, Java Util Logging
    ok grazie mille, l'errore che mi restituisce è questo

    java.sql.SQLException: no such column: 'rowid' at org.sqlite.RS.findColumn(RS.java:121)
    at org.sqlite.RS.getInt(RS.java:293)
    at createLog.main(createLog.java:170)
    l'interrogazione SQL funziona nel database...

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Premetto che non conosco SQLite, ma da quel che sono riuscito a capire documentandomi un po' on-line pare che la colonna rowid possa assumere diversi nomi a seconda di alcune circostanze.

    Da quel che ho capito, dovresti comunque sempre riuscire a recuperarne il valore andando a leggerlo usando l'indice di colonna (che dovrebbe essere sempre 0, la prima):

    codice:
    int valore = queryEnvironment.getInt( 0 );

    Aggiungo anche che io aborro decisamente l'uso di questo tipo di meta-colonne: andrebbero sempre usate con molta (MOLTA!) cautela (io, di fatto, non le userei affatto: una chiave primaria, oltre che più sensata è pure più corretta e sempre coerente, a differenza del rowid, che a questo punto diverrebbe del tutto inutile).


    Ciao.
    "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

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    37
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Premetto che non conosco SQLite, ma da quel che sono riuscito a capire documentandomi un po' on-line pare che la colonna rowid possa assumere diversi nomi a seconda di alcune circostanze.

    Da quel che ho capito, dovresti comunque sempre riuscire a recuperarne il valore andando a leggerlo usando l'indice di colonna (che dovrebbe essere sempre 0, la prima):

    codice:
    int valore = queryEnvironment.getInt( 0 );

    Aggiungo anche che io aborro decisamente l'uso di questo tipo di meta-colonne: andrebbero sempre usate con molta (MOLTA!) cautela (io, di fatto, non le userei affatto: una chiave primaria, oltre che più sensata è pure più corretta e sempre coerente, a differenza del rowid, che a questo punto diverrebbe del tutto inutile).


    Ciao.
    Grazie mille ho risolto

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 © 2024 vBulletin Solutions, Inc. All rights reserved.