Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1
    Utente di HTML.it L'avatar di Buzzz
    Registrato dal
    Jan 2009
    Messaggi
    775

    Visualizzare dati da un database MySQL



    Sono 2 ore che mi ci smeno, ma ancora non sono riuscito a visualizzare i dati da un databse MySQL..

    Allego il codice che utilizzo (solamente quello della connessione e della visualizzazione), e da quello che sembra non entra nel ciclo WHILE..

    codice:
    private void btnOrdini(java.awt.event.ActionEvent evt) {
    //        HomeOrdini f = new HomeOrdini();
    //        f.setTitle("Ordini");
    //        f.setSize(560,400);
    //        f.setVisible(true);
    //        f.setLocation(30,80);
    
            try {
                Class.forName("com.mysql.jdbc.Driver"); //si carica il driver
            } catch (ClassNotFoundException exc) {
                System.out.println("ERRORE, Driver jdbc non presente: "+exc.getMessage());
            }
    
            Connection con = null;
    
            try {
                //con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/pizzeria, root, ");
                con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/pizzeria","root","");
                con.setAutoCommit(false);
    
                JOptionPane.showMessageDialog(null,"Accesso al database MySQL effettuato!");
    
                /* con questa istruzione si fa in modo che il commit avvenga solo se esplicitamente invocato dall'utente*/
                con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
    
                Statement dati = con.createStatement();// si crea un oggetto Statement
                ResultSet results = dati.executeQuery("select * from prodotti");
    
                if (!results.equals("")){
                    JOptionPane.showMessageDialog(null,"visualizza IF");
                    while (results.next()){
                        String s = results.getString("Codice") + " " + results.getString("Nome") + " " + results.getString("Categoria") + " " + results.getInt("Ingredienti") + " " + results.getFloat("Prezzo") + " " + results.getString("Concluso") +  "\n";
                        JOptionPane.showMessageDialog(null,s);
                    }
                    //results.close();
                }
                con.close();
    
            } catch(Exception e) {
                JOptionPane.showMessageDialog(null,"Se non hai scritto niente sei un pirla!Sennò è un errore non riconosciuto!");
            }
        }
    Qualcuno riesce ad aiutarmi a visualizzare un benedetto dato?

    Grazie mille!

  2. #2
    Utente di HTML.it L'avatar di Buzzz
    Registrato dal
    Jan 2009
    Messaggi
    775
    Ho fatto varie prove anche con altri codici, ma il problema è sempre lo stesso..
    Sembra che non entri nel ciclo while

  3. #3
    Utente di HTML.it L'avatar di Nikopol
    Registrato dal
    Jan 2011
    Messaggi
    120
    Ciao, il problema dovrebbe essere qua:
    codice:
    if (!results.equals("")){
        ....
    }
    Stai cercando di confrontare due tipi diversi di oggetti: ResultSet con String.
    Dovresti usare
    codice:
    if (results!=null){
        ....
    }
    Comunque non ti serve usare un if. Il metodo next() si posiziona sul nuovo record solo se ne esiste uno; se lo trova restituisce true altrimenti false.
    Se usi direttamente il while entri nel ciclo solo se il results contiene effettivamente qualcosa.

  4. #4
    Utente di HTML.it L'avatar di Buzzz
    Registrato dal
    Jan 2009
    Messaggi
    775
    Niente, ancora non funziona (anche senza l'IF).. mi stampa il JOptionPAne subito prima del ciclo while, però non entra nel ciclo.

    Ora però mi è venuto un dubbio sull'inserimento:

    Codice che utilizzo in un'altra classe per l'inserimento:
    codice:
    private void btnSalva(java.awt.event.ActionEvent evt) {
            String Codice = "01001";
            String Nome = txtNome.getText().toString();
            //String Categoria = (cbxCategoria.getSelectedItem());
            String Categoria = (String)cbxCategoria.getSelectedItem();
            String Ingredienti = txaIngredienti.getText().toString(); // --- modificare sctringa in float: float prezzoPizza = Float.parseFloat(txtPrezzo.getText().toString());
            String PrezzoS = txtPrezzo.getText().toString();
            float Prezzo = Float.parseFloat(PrezzoS);
            String Concluso = "no";
    
            try {
                Class.forName("com.mysql.jdbc.Driver"); //si carica il driver
            } catch (ClassNotFoundException exc) {
                System.out.println("ERRORE, Driver jdbc non presente: "+exc.getMessage());
            }
    
            Connection con = null;
    
            try {
                //con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/pizzeria, root, ");
                con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/pizzeria","root","");
                con.setAutoCommit(false);
    
                JOptionPane.showMessageDialog(null,"Accesso al database MySQL effettuato!");
    
                /* con questa istruzione si fa in modo che il commit avvenga solo se esplicitamente invocato dall'utente*/
                con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
    
                Statement dati = con.createStatement();// si crea un oggetto Statement
    
                // if(categoriaPizza != "- Scegli categoria -" || nomePizza != ""  || ingredientiPizza != "" || prezzoPizza != "") {
                int insert = dati.executeUpdate("INSERT INTO prodotti VALUES ('"+Codice+"', '"+Nome+"', '"+Categoria+ "', '"+ Ingredienti + "', '"+ Prezzo + "', '"+ Concluso + "')");
                JOptionPane.showMessageDialog(null, Codice+" - "+Nome+" - "+Categoria+" - "+Ingredienti+" - "+Prezzo+" - "+Concluso+" - ");
                //} else {
                    //JOptionPane.showMessageDialog(null,"Non hai inserito pizza.");
                //}
    
                con.close();//si chiude la connessione
            } catch (SQLException exc1) {
                System.out.println("Errore nell'inserimento dei dati: "+exc1.getMessage());
            }
        }
    Qui non mi da nessun errore, ovvero non entra nell'ultimo catch..
    Però ho pensato che:

    - essendo un try catch, se non erro, appena trova un errore all'interno del try, l'applicazione "salta" subito al catch.. se cosi fosse, allora l'executeUpdate dovrebbe essere corretto e quindi l'applicazione inserisce veramente i dati nella tabella del database (siccome dopo l'executeUpdate ho messo un JOptionPane con i dati appena inseriti, e funziona egregiamente).

    In poche parole, suppongo che non funzioni la visualizzazione nel ciclo WHILE

  5. #5
    Infatti il problema non sta nella lettura dei dati ma bensi nell'inserimento in quanto hai impostato l'autoommit a false ma dopo l'inserimento non effettui il commit della transazione che ovviamente viene rollbackata alla chiusura della connessione.
    Soluzione chiama il metodo connection.commit() prima della chiusura della connessione.

  6. #6
    Utente di HTML.it L'avatar di Buzzz
    Registrato dal
    Jan 2009
    Messaggi
    775
    GRAZIE INFINITE !!
    Non immaginate nemmeno da cosa mi avete salvato!

    Ora ho un piccolo problema su una Query..
    Siccome sto realizzando un database per una pizzeria, e utilizzo come chiave primaria Codice, che parte da 01001 e prosegue incrementando la parte blu (la parte rossa è 01 per le pizze, e 02 per le bibite, ma questo non cambia "mai" diciamo)

    Ora avrei bisogno, appena prima dell'inserimento di una nuova pizza, di sapere l'ultimo codice inserito nella tabella, in modo da incrementarlo di +1.

    ESEMPIO:

    01001 Margherita 5€
    .
    .
    .
    .01034 Prosciutto 8€

    01035 4Formaggi 8.5€

    Per inserire correttamente nella tabella il Codice dell'ultima pizza, devo sapere l'ultimo Codice inserito.. per "sapere" questo codice, esiste una Query specifica?

    --

    Piccolo dubbio: Ovviamente posso ordinare la visualizzazione di una tabella per codice utilizzando "SELECT * FROM prodotti ORDER BY Codice";
    ma esiste un metodo anche per l'inserimento ordinato in tabella, o sarebbe inutile utilizzarlo?

    Grazie ancora!

  7. #7
    Originariamente inviato da Buzzz

    Ora avrei bisogno, appena prima dell'inserimento di una nuova pizza, di sapere l'ultimo codice inserito nella tabella, in modo da incrementarlo di +1.

    ESEMPIO:

    01001 Margherita 5€
    .
    .
    .
    .01034 Prosciutto 8€

    01035 4Formaggi 8.5€

    Per inserire correttamente nella tabella il Codice dell'ultima pizza, devo sapere l'ultimo Codice inserito.. per "sapere" questo codice, esiste una Query specifica?
    La query per sapere il codice è banale SELECT MAX(CODICE) FROM TABELLA....

    Però non è cosi banale eseguirla in quanto devi tener conto della concorrenza cioè cosa succede se subito dopo che viene eseguita questa query un'altro client inserisce una nuova riga ? Semplice il nuovo codice che andrai a inserire sarà duplicato....
    Per risolvere questo problema uno dei modi è quello di "lockare" la tabella in modo che nessun altro client ci possa scrivere prima di te :
    codice:
    Statement stmt = null;
    		try {
    			stmt = connection.createStatement();
    			stmt.execute("LOCK TABLES mytablename WRITE");
    			//ESEGUO LA QUERY PER SAPERE IL NUOVO CODICE
    
                            //ESEGUO LA QUERY DI INSERIMENTO
    
    		} catch (SQLException ex) {
    			System.out.println("SQL Exception caught + ex.getMessage() ");
    			throw new SQLException(ex.getMessage(), ex.getSQLState());
    		} finally {
    			if (stmt != null) {
                                    //IMPORTANTISSIMO RIMUOVO IL LOCK DALLA TABELLA
    				stmt.execute("UNLOCK TABLES");
    				stmt.close();
    			}
    		}
    --
    Piccolo dubbio: Ovviamente posso ordinare la visualizzazione di una tabella per codice utilizzando "SELECT * FROM prodotti ORDER BY Codice";
    ma esiste un metodo anche per l'inserimento ordinato in tabella, o sarebbe inutile utilizzarlo?

    Grazie ancora!
    Che senso avrebbe farlo ? perchè vuoi buttar via tutti gli algoritmi di ottimizzazione di un database ?

  8. #8
    Utente di HTML.it L'avatar di Buzzz
    Registrato dal
    Jan 2009
    Messaggi
    775
    Oggi pomeriggio con calma dò un occhio alla prima parte, e provo a fare come mi hai detto..
    E si, per la seconda parte, pensandoci, è una cosa abbastanza inutile.. la mia era solo curiosità

    Ennesimo dubbio:
    siccome quando mi arriva un ordine da parte di un utente (che solitamente ordina più di una pizza), ho bisogno di ordinare tutti gli ordini per ORARIO e per PERSONA, in modo da avere in cima alla lista visualizzata gli ordini con un orario inferiore (devo preparare ovviamente prima le pizze per le 20.00, poi per le 20.15 e infine quelle per le 20.45 per esempio)..
    Però, allo stesso tempo, se ho 5 utenti che ordinano la pizza alle 20.15, non coglio che essi si "mescolino" fra di loro.. ma li devo avere uno dopo l'altro..

    C'è un modo per ordinare gli ordini prima per orario, e successivamente per persona?
    Posso farlo inserendo due ORDER uno dopo l'altro?

  9. #9
    Stai facendo un software gestionale senza avere una minima base di SQL.....
    La vedo ardua la buona riuscita...
    Cmq venendo alla tua domanda (banale per chi ha appreso almeno le basi di sql) si può specificare quante colonne vuoi nell'ordinamento order by colonna1 [ASC,DESC],colonna 2[ASC,DESC].....

  10. #10
    Utente di HTML.it L'avatar di Buzzz
    Registrato dal
    Jan 2009
    Messaggi
    775


    Riguardo il problema dell'incremento del codice non ho problemi di concorrenza, come dici, siccome sarò solamente io (un solo utente) a dover inserire le pizze..
    Quindi, in fondo mi basteranno 3 passaggi:

    1) prendo il Codice più grande;
    2) lo dichiaro/applico alla varibile Cod;
    3) incremento di +1 la variabile Cod;

    In poche parole, penso che basti una sola riga simile a questa:
    codice:
    Statement dati = con.createStatement();
    Cod = dati.______ ("SELECT MAX(Codice) FROM prodotti");
    Cod++;
    Solamente che non capisco cosa vada messo nella parte rossa, in modo da "prendere" il Codice dal database.

    PS: ho pensato di fare con il .executeQuery come per la visualizzazione, è una buona idea? Perchè allora dovrei "dichiarare" Cod come ResultSet

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.