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

Discussione: JtextArea & Mysql

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110

    JtextArea & Mysql

    Ciao,
    sto creando una classe swing di inserimento prodotto in un db.
    Ho creato un campo JTextArea(8,20) per la descrizione del prodotto solo che poi, una volta inserito nel db, mi sballa totalmente la visualizzazione delle varie colonne. E' normale?

    Se inserisco poche parole nella descrizione mi esce qualcosa del genere:

    mysql> select * from listaprodotti;
    +----+-------------------+-----------+----------------------------+--------+---------------+---------------+------------+-----------+
    | id | nomeprodotto | categoria | descrizione | prezzo | disponibilita | maxordinabile | produttore | fornitore |
    +----+-------------------+-----------+----------------------------+--------+---------------+---------------+------------+-----------+
    | 1 | Ovetto | Alimenti | Ovetto Kinder classico 1 | 1.00 | 10 | 10 | Famila | |
    | 3 | Kinder Cioccolata | Alimenti | Ovetto Kinder classico 1 | 1.00 | 10 | 10 | Famila | |
    +----+-------------------+-----------+----------------------------+--------+---------------+---------------+------------+-----------+
    2 rows in set (0.00 sec)
    Cosa è quell'1 accanto a "ovetto kinder classico"?
    Aggiungo che ho inserito l'opzione per inserire nel db solo se non è già presente ma se provo ad inserire due volte, pur non riuscendoci, il valore di id viene incrementato ugualmente quindi mi ritrovo a passare da ID 1 a ID 3... come si può risolvere?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    sto creando una classe swing di inserimento prodotto in un db.
    Ho creato un campo JTextArea(8,20) per la descrizione del prodotto solo che poi, una volta inserito nel db, mi sballa totalmente la visualizzazione delle varie colonne. E' normale?
    Probabilmente non ho capito io .... "sballa totalmente la visualizzazione" DOVE?

    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    Se inserisco poche parole nella descrizione mi esce qualcosa del genere:
    Ma questo è solo l'uso "tecnico" dei tools del MySQL ... non c'entra nulla con la applicazione e con l'utente (se poi l'utente è un "tecnico" e si mettere a fare query "a mano" sul DB ... sono affati suoi).

    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    Cosa è quell'1 accanto a "ovetto kinder classico"?
    Non lo so .... fa parte della descrizione. Spiega meglio come inserisci i record, mostra del codice.

    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    Aggiungo che ho inserito l'opzione per inserire nel db solo se non è già presente
    Di quale opzione (o forse per meglio dire "clausola" nella query) stai parlando esattamente??
    Ci sono diversi modi per far sì che un INSERT non inserisca o non abbia effetto in base a cosa sta inserendo o ad altra condizione.

    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    ma se provo ad inserire due volte, pur non riuscendoci, il valore di id viene incrementato ugualmente quindi mi ritrovo a passare da ID 1 a ID 3... come si può risolvere?
    Ripeto: spiega meglio cosa vuoi fare e mostra anche del codice.
    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
    Aug 2016
    Messaggi
    110
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Probabilmente non ho capito io .... "sballa totalmente la visualizzazione" DOVE?


    Ma questo è solo l'uso "tecnico" dei tools del MySQL ... non c'entra nulla con la applicazione e con l'utente (se poi l'utente è un "tecnico" e si mettere a fare query "a mano" sul DB ... sono affati suoi).
    mi sballa la visualizzazione nel client mysql... io "programmatore" dove e come controllo i vari db altrimenti?
    Scusa l'ignoranza ma sto approcciando or ora al mysql... è tutto nuovo per me!

    Quote Originariamente inviata da andbin Visualizza il messaggio
    Non lo so .... fa parte della descrizione. Spiega meglio come inserisci i record, mostra del codice.
    Ecco il codice:



    codice:
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    
    
    public class ProdottoInserisci extends JFrame implements ActionListener {
    
    
        private static final int LARGHEZZA = 430;
        private static final int ALTEZZA = 400;
        
        String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
        String DB_URL = "jdbc:mysql://localhost/magazzino?user=root&password=xyz";
        
        Connection con;
        Statement st;
        ResultSet rs;    
        
        JTextField nomeprodottoText, categoriaText, prezzoText, disponibilitaText, maxordinabileText, produttoreText, fornitoreText;
        JTextArea descrizioneText;
        
        public ProdottoInserisci(){
            
            setTitle("Inserisci prodotto:");
            setSize(LARGHEZZA,ALTEZZA);
            
            JPanel pannello = new JPanel();
            pannello.setLayout(null);
            
            JLabel nomeprodottoLabel = new JLabel("Nome Prodotto: ");
            nomeprodottoLabel.setBounds(10,10,125,25);
            pannello.add(nomeprodottoLabel);
            
            nomeprodottoText = new JTextField(20);
            nomeprodottoText.setBounds(120,10,160,25);
            pannello.add(nomeprodottoText);
            
            JLabel categoriaLabel = new JLabel("Categoria: ");
            categoriaLabel.setBounds(10,50,80,25);
            pannello.add(categoriaLabel);
                    
            categoriaText = new JTextField(20);
            categoriaText.setBounds(120,50,160,25);
            pannello.add(categoriaText);
            
            JLabel prezzoLabel = new JLabel("Prezzo: ");
            prezzoLabel.setBounds(10,90,80,25);
            pannello.add(prezzoLabel);
            
            prezzoText = new JTextField(20);
            prezzoText.setBounds(120,90,160,25);
            pannello.add(prezzoText);
            
            JLabel descrizioneLabel = new JLabel("Descrizione: ");
            descrizioneLabel.setBounds(10,130,80,25);
            pannello.add(descrizioneLabel);
            
            descrizioneText = new JTextArea(8,20);
            descrizioneText.setBounds(120,130,160,40);
            pannello.add(descrizioneText);
            
            JLabel disponibilitaLabel = new JLabel("Disponibilita: ");
            disponibilitaLabel.setBounds(10,190,80,25);
            pannello.add(disponibilitaLabel);
            
            disponibilitaText = new JTextField(20);
            disponibilitaText.setBounds(120,190,160,25);
            pannello.add(disponibilitaText);
            
            JLabel maxordinabileLabel = new JLabel("Da poter ordinare: ");
            maxordinabileLabel.setBounds(10,230,130,25);
            pannello.add(maxordinabileLabel);
            
            maxordinabileText = new JTextField(20);
            maxordinabileText.setBounds(120,230,160,25);
            pannello.add(maxordinabileText);
            
            JLabel produttoreLabel = new JLabel("Produttore: ");
            produttoreLabel.setBounds(10,270,80,25);
            pannello.add(produttoreLabel);
            
            produttoreText = new JTextField(20);
            produttoreText.setBounds(120,270,160,25);
            pannello.add(produttoreText);
            
            JLabel fornitoreLabel = new JLabel("Fornitore: ");
            fornitoreLabel.setBounds(10,310,80,25);
            pannello.add(fornitoreLabel);
            
            fornitoreText = new JTextField(20);
            fornitoreText.setBounds(120,310,160,25);
            pannello.add(fornitoreText);
            
            JButton signup = new JButton("Sign Up!");
            signup.setBackground(Color.LIGHT_GRAY);
            signup.addActionListener(this);
            signup.setBounds(300,30, 80,25);
            pannello.add(signup);
            
            add(pannello);
            
        }
            
        
        public void connetti(Prodotto prodotto){    
                try {
                
                Class.forName(JDBC_DRIVER);
                
                System.out.println("Connecting to a selected database...");
                con = DriverManager.getConnection(DB_URL);
                
                System.out.println("Connected database successfully...");    
                st = con.createStatement();
                
                String sql = "INSERT INTO listaprodotti(nomeprodotto, categoria, descrizione, prezzo, disponibilita, maxordinabile, produttore, fornitore) VALUES ('"+ prodotto.getNomeProdotto() + "','" + prodotto.getCategoria() + "','" + prodotto.getDescrizione() + "','" + prodotto.getPrezzo() + "','" + prodotto.getDisponibilita() + "','" + prodotto.getMaxOrdinabile() + "','" + prodotto.getProduttore() +"','" + prodotto.getFornitore() + "')" ; 
                st.executeUpdate(sql);
                }    catch(SQLException se) //catch block 
                {
                //Handle errors for JDBC
                se.printStackTrace();
                }   catch(Exception e) //catch block
                {
                //Handle errors for Class.forName
                e.printStackTrace();
                }      finally  {
                //finally block used to close resources
                    try  //try block
                    {
                        if(con!=null)//condition
                        con.close(); //close connection
                        System.out.println("Close database successfully...");    
                    }
                    catch(SQLException se)//Handle errors
                    {
                        se.printStackTrace();
                    }//end finally try
                }//end try*/
        
            }
        
        public void actionPerformed(ActionEvent e){
            Prodotto prodotto = new Prodotto();
            
            prodotto.setNomeProdotto(nomeprodottoText.getText());
            prodotto.setCategoria(categoriaText.getText());
            prodotto.setDescrizione(descrizioneText.getText());
            prodotto.setPrezzo(Double.parseDouble(prezzoText.getText()));
            prodotto.setDisponibilita(Integer.parseInt(disponibilitaText.getText()));
            prodotto.setMaxOrdinabile(Integer.parseInt(maxordinabileText.getText()));
            prodotto.setProduttore(produttoreText.getText());
            prodotto.setFornitore(fornitoreText.getText());
            
            connetti(prodotto);
            
        }
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
    
            ProdottoInserisci prodottoinserisci = new ProdottoInserisci();
            prodottoinserisci.setVisible(true);
        }
        
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Di quale opzione (o forse per meglio dire "clausola" nella query) stai parlando esattamente??
    Ci sono diversi modi per far sì che un INSERT non inserisca o non abbia effetto in base a cosa sta inserendo o ad altra condizione.
    Ho settato nel client mysql la colonna "nomeprodotto" come unica:

    codice:
    describe listaprodotti
        -> ;
    +---------------+--------------+------+-----+---------+----------------+
    | Field         | Type         | Null | Key | Default | Extra          |
    +---------------+--------------+------+-----+---------+----------------+
    | id            | int(11)      | NO   | PRI | NULL    | auto_increment |
    | nomeprodotto  | varchar(20)  | YES  | UNI | NULL    |                |
    | categoria     | varchar(20)  | YES  |     | NULL    |                |
    | descrizione   | varchar(45)  | YES  |     | NULL    |                |
    | prezzo        | double(10,2) | YES  |     | NULL    |                |
    | disponibilita | int(10)      | YES  |     | NULL    |                |
    | maxordinabile | int(10)      | YES  |     | NULL    |                |
    | produttore    | varchar(20)  | YES  |     | NULL    |                |
    | fornitore     | varchar(20)  | YES  |     | NULL    |                |
    +---------------+--------------+------+-----+---------+----------------+
    9 rows in set (5.76 sec)
    Ripeto: spiega meglio cosa vuoi fare e mostra anche del codice.[/quote]
    Vorrei visualizzare la tabella del db come se fosse MS Access... cioè in modo ordinato e gestibile.
    Vorrei anche che i dati vengano inseriti correttamente senza valori strani tipo quell'1 che non so da dove derivi...

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    mi sballa la visualizzazione nel client mysql... io "programmatore" dove e come controllo i vari db altrimenti?
    Ma tu da "sviluppatore" puoi fare qualunque verifica che vuoi e con i tool che ti pare. Puoi usare i tools a linea di comando del MySQL oppure altri strumenti "visuali" per MySQL ( http://www.html.it/pag/32163/program...zione-di-mysql ).
    Cosa tu "vedi" da sviluppatore NON è importante ... non per l'utente finale.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ma tu da "sviluppatore" puoi fare qualunque verifica che vuoi e con i tool che ti pare. Puoi usare i tools a linea di comando del MySQL oppure altri strumenti "visuali" per MySQL ( http://www.html.it/pag/32163/program...zione-di-mysql ).
    Cosa tu "vedi" da sviluppatore NON è importante ... non per l'utente finale.
    Capit... grazie!
    comunque, ritornando al mitico "1", secondo te perché compare?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    comunque, ritornando al mitico "1", secondo te perché compare?
    Non lo so, nel senso che dal codice "a occhio" non vedo nulla che possa portare all'inserimento di uno strano "1" nella descrizione.

    E comunque ci sono svariati problemi nel codice, uno "grave" è la composizione della query con una banale concatenazione delle stringhe. Questo ti espone ad un sacco di problemi. Se l'utente inserisce ad esempio nella descrizione un solo apice singolo (es. scrive ragu' ) la tua query è sballata come sintassi e non ti funziona un bel niente.

    Serve (servirebbe ...) molto più studio per questo e molti altri aspetti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Non lo so, nel senso che dal codice "a occhio" non vedo nulla che possa portare all'inserimento di uno strano "1" nella descrizione.

    E comunque ci sono svariati problemi nel codice, uno "grave" è la composizione della query con una banale concatenazione delle stringhe. Questo ti espone ad un sacco di problemi. Se l'utente inserisce ad esempio nella descrizione un solo apice singolo (es. scrive ragu' ) la tua query è sballata come sintassi e non ti funziona un bel niente.

    Serve (servirebbe ...) molto più studio per questo e molti altri aspetti.
    Scusami, potresti spiegarmi questa questione della concatenazione di stringhe? Perché se l'utente inserisce nella descrizione un apice solo si dovrebbe sballare tutto? Grazie

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    Scusami, potresti spiegarmi questa questione della concatenazione di stringhe? Perché se l'utente inserisce nella descrizione un apice solo si dovrebbe sballare tutto? Grazie
    Perché nella stringa risultante composta dalla concatenazione avresti qualcosa del tipo:

    ....xxxxxx','ragu'','yyyyy....

    E questo alla fine ti dà una query di INSERT "sballata" per MySQL. Questo è "grave" in una applicazione.

    Vuoi la prova?

    Esegui manualmente

    SELECT 'ragu'

    e poi

    SELECT 'ragu''

    esattamente così come li ho scritti e vedi la differenza.
    Ultima modifica di andbin; 23-01-2017 a 11:22
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Perché nella stringa risultante composta dalla concatenazione avresti qualcosa del tipo:

    ....xxxxxx','ragu'','yyyyy....

    E questo alla fine ti dà una query di INSERT "sballata" per MySQL. Questo è "grave" in una applicazione.

    Vuoi la prova?

    Esegui manualmente

    SELECT 'ragu'

    e poi

    SELECT 'ragu''

    esattamente così come li ho scritti e vedi la differenza.
    e come si può risolvere questo problema? Ho cercato vari esempi online di inserimento e praticamente sono tutti strutturati in questo modo...

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.