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

    Problema con campi vuoti

    sto facendo un programmino per interfacciarmi al mio db (mysql) personale.
    codice:
    desc movimenti;
    +---------+----------+------+-----+---------+----------------+
    | Field   | Type     | Null | Key | Default | Extra          |
    +---------+----------+------+-----+---------+----------------+
    | id      | int(10)  | NO   | PRI | NULL    | auto_increment |
    | entrate | int(11)  | YES  | MUL | NULL    |                |
    | uscite  | int(11)  | YES  | MUL | NULL    |                |
    | causale | char(30) | YES  |     | NULL    |                |
    | data    | char(10) | YES  |     | NULL    |                |
    +---------+----------+------+-----+---------+----------------+
    come vedete ho lasciato la possibilità di campi vuoti.
    il problema è che se provo ad inserire una uscita (nn mettendo l'entrata ovviamente) mi da errore:
    codice:
    Incorrect integer value:"for column 'entrate' at row 1
    vi posto un pò di roba:
    codice:
    import java.sql.*;
    import javax.swing.*;
    
    public class Movimenti {
    
        private String entrate;
        private String uscite;
        private String causale;
        private String data;
    
        public Movimenti(String entrate, String uscite, String causale, String data) {
            this.entrate = entrate;
            this.uscite = uscite;
            this.causale = causale;
            this.data = data;
        }
    .......
    public boolean salva() {
            try {
                Connection conn = DriverManager.getConnection("jdbc:mysql://62.94.208.157:3306/banca?user=root&password=qwyjkzx");
                Statement stmt = conn.createStatement();
                int g = stmt.executeUpdate("insert into movimenti (entrate,uscite,causale,data) values('" + this.entrate + "','" + this.uscite + "','" + this.causale + "','" + this.data + "')");
                stmt.close();
                return true;
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
                return false;
            }
        }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Problema con campi vuoti

    Originariamente inviato da fermat
    codice:
    | entrate | int(11)  | YES  | MUL | NULL    |                |
    | uscite  | int(11)  | YES  | MUL | NULL    |                |
    codice:
        private String entrate;
        private String uscite;
    
                int g = stmt.executeUpdate("insert into movimenti (entrate,uscite,causale,data) values('" + this.entrate + "','" + this.uscite + "','" + this.causale + "','" + this.data + "')");
    Se entrate e uscite sono degli int (quindi valori numerici) .... perché devi "modellarli" nella classe con dei String e poi quotarli nella query??

    Che succede se nei due campi dell'oggetto c'è un null e quindi tu cerchi di inserire 'null'? Che la insert fallisce.
    Che succede se nei due campi c'è effettivamente una stringa che non ha il formato corretto per un int? Che la insert fallisce.

    No, rivaluta bene questo.


    P.S. e dal punto di vista tecnico della creazione della query e dal punto di vista del "design" della classe ci sarebbero altre questioni ... ma non sto ad "infierire".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    lasciando un attimo perdere le migliorie (che senno stiamo qua fino a domani probabilmente).
    ho provato a modificare così:
    codice:
    public class Movimenti {
    
        private int entrate;
        private int uscite;
        private String causale;
        private String data;
    
        public Movimenti(int entrate, int uscite, String causale, String data) {
            this.entrate = entrate;
            this.uscite = uscite;
            this.causale = causale;
            this.data = data;
        }
    ....
        public boolean salva() {
            try {
                Connection conn = DriverManager.getConnection("jdbc:mysql://62.94.208.157:3306/banca?user=root&password=qwyjkzx");
                Statement stmt = conn.createStatement();
                int g = stmt.executeUpdate("insert into movimenti (entrate,uscite,causale,data) values(" + this.entrate + "," + this.uscite + ",'" + this.causale + "','" + this.data + "')");
                stmt.close();
                return true;
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
                return false;
            }
        }
    in fase di esecuzione mi da questo errore:
    codice:
    Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
            at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
            at java.lang.Integer.parseInt(Integer.java:470)
            at java.lang.Integer.parseInt(Integer.java:499)
            at banca.Banca.jButton1MouseClicked(Banca.java:182)
            at banca.Banca.access$100(Banca.java:17)
            at banca.Banca$2.mouseClicked(Banca.java:73)
            at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
            at java.awt.Component.processMouseEvent(Component.java:6266)
            at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
            at java.awt.Component.processEvent(Component.java:6028)
            at java.awt.Container.processEvent(Container.java:2041)
            at java.awt.Component.dispatchEventImpl(Component.java:4630)
            at java.awt.Container.dispatchEventImpl(Container.java:2099)
            at java.awt.Component.dispatchEvent(Component.java:4460)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
            at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
            at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
            at java.awt.Container.dispatchEventImpl(Container.java:2085)
            at java.awt.Window.dispatchEventImpl(Window.java:2478)
            at java.awt.Component.dispatchEvent(Component.java:4460)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

  4. #4
    ok con la modifica funziona a patto di inserire sempre un valore.
    quindi se metto un'uscita a entrata devo mettere zero, e viceversa.
    come posso gestire i null in java??

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da fermat
    come posso gestire i null in java??
    Se intendi controllare se viene passato un nulll è sufficiente:

    codice:
    if(str == null) { ... }
    Oppure confrontandolo con !=

    Comunque non penso sia proprio corretto aprire continuamente una connessione ogni volta che salvi

  6. #6
    Bhe nn penso faccia al caso mio xche il null che devo gestire è quello del db.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fermat
    in fase di esecuzione mi da questo errore:
    codice:
    Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
            at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
            at java.lang.Integer.parseInt(Integer.java:470)
            at java.lang.Integer.parseInt(Integer.java:499)
            at banca.Banca.jButton1MouseClicked(Banca.java:182)
    Per quello che posso vedere. anzi è meglio dire intuendo "a naso" quello che non posso vedere perché non l'hai postato ..... posso dedurre che questa eccezione ce l'hai molto ben prima di settare lo stato di quel tuo oggetto e del salva().

    Fai click su un pulsante, presumo tu abbia dei campi di "testo" (o input dall'utente in qualche modo) da cui prelevi una stringa e ne fai il parsing con parseInt(). Se il campo è vuoto, la stringa è vuota ( "" ) e in tal caso non è valida secondo la logica di parseInt!!

    Questo non centra nulla con i null, con il DB o con la query. Per ognuno dei campi dovresti fare tu una logica del tipo: è vuoto? Allora puoi: o segnalarlo all'utente come campo "obbligatorio" oppure trattarlo come default es. a 0. Se non è vuoto fai il parseInt(), se esso lancia NumberFormatException potresti nuovamente segnalare il problema all'utente (ha digitato male lui, evidentemente) oppure anche qui applicare un valore di default.

    Ma devi scegliere e fare tu qualcosa.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    a rieccomi.
    sono riuscito a trovare un pò di tempo solo oggi.
    io pensavo a una cosa del genere:
    codice:
    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
            if (jTextField1 == null) {
                jTextField1.setText("0");
                Movimenti movimenti = new Movimenti(Integer.parseInt(jTextField1.getText()), Integer.parseInt(jTextField2.getText()), jTextField3.getText(), jTextField4.getText());
                jTextField1.setText("");
                jTextField2.setText("");
                jTextField3.setText("");
                jTextField4.setText("");
                movimenti.salva();
            }
            if (jTextField2 == null) {
                jTextField2.setText("0");
                Movimenti movimenti = new Movimenti(Integer.parseInt(jTextField1.getText()), Integer.parseInt(jTextField2.getText()), jTextField3.getText(), jTextField4.getText());
                jTextField1.setText("");
                jTextField2.setText("");
                jTextField3.setText("");
                jTextField4.setText("");
                movimenti.salva();
            } else {
                JOptionPane.showMessageDialog(null, "Dati mancanti");
            }
        }
    il mio problema è come faccio a separare i due casi (quando metto l'entrata, l'uscita è zero e viceversa).

  9. #9
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da fermat
    a rieccomi.
    sono riuscito a trovare un pò di tempo solo oggi.
    io pensavo a una cosa del genere:
    codice:
    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
            if (jTextField1 == null) {
                jTextField1.setText("0");
                Movimenti movimenti = new Movimenti(Integer.parseInt(jTextField1.getText()), Integer.parseInt(jTextField2.getText()), jTextField3.getText(), jTextField4.getText());
                jTextField1.setText("");
                jTextField2.setText("");
                jTextField3.setText("");
                jTextField4.setText("");
                movimenti.salva();
            }
            if (jTextField2 == null) {
                jTextField2.setText("0");
                Movimenti movimenti = new Movimenti(Integer.parseInt(jTextField1.getText()), Integer.parseInt(jTextField2.getText()), jTextField3.getText(), jTextField4.getText());
                jTextField1.setText("");
                jTextField2.setText("");
                jTextField3.setText("");
                jTextField4.setText("");
                movimenti.salva();
            } else {
                JOptionPane.showMessageDialog(null, "Dati mancanti");
            }
        }
    Hai letto bene questi if? Stai facendo fare delle operazioni su un oggetto quando questo oggetto è null! Tradotto: NullPointerException.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  10. #10
    eh si me ne sono accorto, solo che nn so come fare a dirgli:
    if (jTextField 1 è vuoto){
    ecc.........

    ho pensato a null perchè è l'unica cosa che mi veniva in mente.

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.