Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    query mysql correzione codice

    ciao ragazzi sto provando a scrivere un programma in java che mi permetta di leggere una query da un database mysql , ma ho un problema mi parte l' eccezione...
    il database è fatto così

    codice:
    id statoattivazione
    1 1
    ed ora il codice in java:

    codice:
        public static boolean statoFunzionamento(){
            Vector v = null;
    	String [] record;
    	int colonne = 0;
            boolean b = false;
            String errore;
            try{
                //connetto al database
              Connection db = DriverManager.getConnection("jdbc:mysql://localhost/attfebip?user=admin&password=password");
              Statement stmt = db.createStatement();     // Creo lo Statement per l'esecuzione della query
              ResultSet rs = stmt.executeQuery("SELECT DISTINCT statoattivazione FROM attivazionifebip WHERE id = 1");   // Ottengo il ResultSet dell'esecuzione della query
              ResultSetMetaData rsmd = rs.getMetaData();
    	  colonne = rsmd.getColumnCount();
              
              String xl = rs.getString(0);
              
              
    	
    	  rs.close();     // Chiudo il ResultSet
    	  stmt.close();   // Chiudo lo Statement
              JOptionPane.showMessageDialog(null,"ciao " + xl , "Errore", JOptionPane.ERROR_MESSAGE);
              if (xl.equals("1")){
                 b = true;
                 }
            
           }
            catch (Exception e) { 
                errore = e.getMessage();
                  JOptionPane.showMessageDialog(null,"ciao ecce " , "Errore", JOptionPane.ERROR_MESSAGE);
                
            }
             
            
            
            return b;
        }
    il metodo dovrebbe ritornare true se la voce statoattivazione nel primo record corrispondente alla id 1 è 1 se invece diverso da 1 nn mi viene.

    p.s ho provato a scrivere il metodo usando un vector per l' inserimento della query ma poi non so più come trovare se il valore è 1 o diverso.... ( parlando di if )


    grazie mille in anticipi per le rispsote future

  2. #2

    Re: query mysql correzione coidice

    Originariamente inviato da r1si
    ciao ragazzi sto provando a scrivere un programma in java che mi permetta di leggere una query da un database mysql , ma ho un problema mi parte l' eccezione...
    Dovresti utilizzare uno tra i metodi first, next, last (a seconda delle tue esigenze) per avanzare nella lettura dei dati nel ResultSet, altrimenti da errore.

  3. #3
    grazie mille per la risposta ma potresti farmi un esempio di cosa stampa al query? non so come usarli questi metodi , visto che nn ho capito quando ritorna la query dal db cosa mi salva ....

  4. #4
    Originariamente inviato da r1si
    grazie mille per la risposta ma potresti farmi un esempio di cosa stampa al query? non so come usarli questi metodi , visto che nn ho capito quando ritorna la query dal db cosa mi salva ....
    Ok, però prima devo darti un consiglio:
    potresti crearti una classe separata che gestisca le connessioni al Database e altre classi che dunque gestiscono le relative tabelle.

    Per gestire le connessioni potresti definire una classe simile a questa:
    codice:
    public class ConnectionManager{
    
            public ConnectionManager(){
            }
    
            public Connection createConnection(String host, String dbname, String user, String password){
                     Connection connection = null;
                     try {
                            Class.forName("com.mysql.jdbc.Driver"); // istanzi il driver (questa istruzione dalla libreria mysql 5.1.15 in poi non dovrebbe essere necessaria)
                            connection = DriverManager.getConnection("jdbc:mysql://localhost/"  
                                              + dbname + "?user=" + user + "&password=" + password);
                     } catch ( SQLException e ) {
                           e.printStackTrace();
                     }
                     return connection;
            }
    }
    Controlla comunque che l'istruzione che ho commentato sia o meno necessaria per la tua versione, altrimenti in prima istanza l'errore viene generato per via della mancata istanziazione del Driver.

    Tornando al ResultSet, se la tua query restituisce n tuple/record, potresti scrivere:
    codice:
    ...
              ResultSet rs = stmt.executeQuery( query );
              
              while ( rs.next() ) {
                     // qui vai a leggere dal result set i campi dell'i-esimo record restituito
                     // utilizzando i metodi opportuni:
                     // cioè rispettando la mappatura dei tipi tra il DB e Java
                     // e li carichi in un oggetto che magari rappresenta la tabella su cui fai la query
                     // o in altre strutture...
              }
    ...
    Se invece sai che la tua query restituisce solo un record, allora:
    codice:
    ...
              ResultSet rs = stmt.executeQuery( query );
              
              rs.first();
              // ora puoi leggere dal result set i campi dell'unico record restituito
              // e salvi il valore in una variabile/oggetto eventualmente da restituire
    ...

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Altra cosa... gli indici dei campi, usando JDBC, partono da 1 e non da 0, quindi:

    codice:
    String x1 = rs.getString(1);
    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

  6. #6
    grazie mille per le risposte ora provo ma in soldoni la query dadatbase cose dovrebbe risultare?
    1 ?
    perchè se io per test faccio come avete detto voi in vector allora non mi parte l' eccezione ma tipo se provo a far stampare a video il vector v mi viente fuori questa scritta
    [[Java.Lang.String@688a88
    una cosa così.... non capisco se ho sbagliato qualcosa io a creare il database in mysql oppure non riesco a scrivere i codici per la query...

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Se tenti di stampare un oggetto Vector ottieni a video una stringa che rappresenta una locazione di memoria, quella dove risiede il Vector.
    Poi, dentro al Vector potrebbero esserci degli array... se stampi un array ottieni la locazione in memoria dell'array... anche qui, niente di utile.

    Dato che mi pare tu abbia preso parte di quel codice dalla mia vecchia pillola, allora il contenuto del Vector è un array di stringhe.

    Quello che devi stampare è il contenuto dell'array.

    Quindi:

    codice:
    Vector<String[]> v = db.eseguiQuery( ... );
    for(String[] arr : v) {
       for(String s : arr) {
          System.out.println( s );
       }
    }

    Ad ogni modo, se la tabella è quella che hai postato all'inizio del post, allora la query restituirà un solo record con un solo campo, il cui valore sarà 1.

    Se lo recuperi usando "getString()" otterrai la stringa "1".
    Se lo recuperi usando "getInt()" otterrai l'intero 1.

    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

  8. #8
    ho provato a seguire le vostre indicazioni ma non riesco a prelevare il valore, se lo faccio con rs.getInt(1) mi da l' eccezione....

    per ora sono arrivato qui... con questo codice ( forse preso proprio dalla tua pillola ) non vi sono errori .
    codice:
        public static boolean statoFunzionamento() {
            Vector v = null;
            String[] record;
            int colonne = 0;
            boolean b = false;
            String errore;
            try {
                //connetto al database
                Connection db = DriverManager.getConnection("jdbc:mysql://localhost/attfebip?user=admin&password=password");
                Statement stmt = db.createStatement();     // Creo lo Statement per l'esecuzione della query
                ResultSet rs = stmt.executeQuery("SELECT DISTINCT statoattivazione FROM attivazionifebip WHERE id = 1");   // Ottengo il ResultSet dell'esecuzione della query
                ResultSetMetaData rsmd = rs.getMetaData();
                colonne = rsmd.getColumnCount();
                v = new Vector();
                while (rs.next()) {   // Creo il vettore risultato scorrendo tutto il ResultSet
                    record = new String[colonne];
                    for (int i = 0; i < colonne; i++) {
                        record[i] = rs.getString(i + 1);
                    }
                    v.add((String[]) record.clone());
                }
    //            int xl = rs.getInt(1);
                
                
    
                rs.close();     // Chiudo il ResultSet
                stmt.close();   // Chiudo lo Statement
                JOptionPane.showMessageDialog(null, "ciao regolare" , "Errore", JOptionPane.ERROR_MESSAGE);
                if (v.equals("1")) {
                    b = true;
                }
    
            } catch (Exception e) {
                errore = e.getMessage();
                JOptionPane.showMessageDialog(null, "ciao ecce " , "Errore", JOptionPane.ERROR_MESSAGE);
    
            }
    
    
    
            return b;
        }
    rs.getInt(1) è commentato.

  9. #9
    Originariamente inviato da r1si
    ho provato a seguire le vostre indicazioni ma non riesco a prelevare il valore, se lo faccio con rs.getInt(1) mi da l' eccezione....

    codice:
    ...
                v = new Vector();
                while (rs.next()) {   // Creo il vettore risultato scorrendo tutto il ResultSet
                    record = new String[colonne];
                    for (int i = 0; i < colonne; i++) {
                        record[i] = rs.getString(i + 1);
                    }
                    v.add((String[]) record.clone());
                }
    //            int xl = rs.getInt(1);
    
    ...
    rs.getInt(1) è commentato.
    Perchè dopo il ciclo il ResultSet è praticamente vuoto..

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da VincenzoTheBest
    Perchè dopo il ciclo il ResultSet è praticamente vuoto..
    Esatto... perchè non elimini, semplicemente, la parte relativa alla costruzione dell'array di stringhe, dato che a quanto pare non ti serve/interessa?

    Il codice di quella pillola era un esempio d'uso... chiaro che va adattato alle esigenze. Tu non hai nessuna esigenza di ottenere un Vector di array di String... fanne a meno. Elimina tutto quello che riguarda il Vector, tutto quello che riguarda l'array di String (record) e preleva solo quello che ti interessa.


    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

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.