Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269

    Da tipo stringa a tipo data

    Salve ragazzi ho la necessità di inserire una data all'interno di un database.
    Ricevo le info sul giorno, mese e anno attraverso delle ComboBox, e per ora ho creato un action di questo tipo quanco clicco il pulsante Inserisci:

    codice:
        private void pushButtonInserisciAction(ActionEvent event) throws SQLException, ParseException {
            String data;
            String giorno;
            String mese;
            String anno;
            
            giorno = giorniList.getSelectedItem().toString();
            mese   = mesiList.getSelectedItem().toString();
            anno   = anniList.getSelectedItem().toString();
            data   = anno+"-"+mese+"-"+giorno;
            
            DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            java.util.Date choise = sdf.parse(data.toString());
            
            System.out.print("Data scelta: " + choise);
            
        }
    Però stampa qualcosa del tipo:

    codice:
    Data scelta: Wed Oct 07 00:00:00 CEST 2015
    In alto nelle combo ho scelto: 7 novembre 2015.
    Premetto che nella combo del mese ho: "Gen", "Feb", "Ago", ..."Nov" e così via... può darsi che l'errore è dato dai valori della combo Mese?
    Con i sogni possiamo conoscere il futuro...

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Da tipo stringa a tipo data

    Cosa ti aspetti in stampa?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    @Alex'87 penso che si riferisca la fatto che ha inserito "novembre" e viene stampato "ottobre".

    Ho riscritto un piccolo esempio, basato sul tuo codice:

    codice:
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class Demo {
        public static void main(String args[]) throws Exception {
            String data = "2015-11-07";
            DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date choise = sdf.parse(data);
            System.out.println("Data scelta: " + choise);
        }
    }
    A me stampa correttamente:
    codice:
    Data scelta: Sat Nov 07 00:00:00 CET 2015
    Ciao

  4. #4
    Il problema infatti è dato dal pattern passato al SimpleDateFormat, come dice lui nella comboBox dei mesi ha "Gen","Feb"....
    Il pattern "yyyy-MM-dd" si aspetta che il mese sia numerico es 01,02 etc...
    Ti basta modificare il pattern in "yyyy-MMM-dd" per avere il risultato voluto.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    @francesco.muia corretto, mi ero perso la sua frase "Premetto che nella combo del mese ho" e avevo dato per scontato avesse tutto numerico. Se usa non-numerico deve solo fare attenzione alla lingua ("Jan" e "Gen").

  6. #6
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Ragazzi volevo sottolineare una cosa, tutta la stringa che vado a "generare", devo andarla a salvare in un database oralce il quale accetta le date in questo modo:

    gg - mmm - yyyy esempio: 12 - Oct - 2010

    Però da come viene stampata non direi che vada bene...
    Con i sogni possiamo conoscere il futuro...

  7. #7
    La stampa di un oggetto Date è una cosa il toString di tale classe stampa appunto tutte le informazioni in essa contenute.
    Sempre con lo stesso SimpleDateFormat, metodo format, puoi farti restituire la stringa nel formato richiesto.
    Se proprio vuoi un consiglio, nn usare un semplice Statement per effettuare l'insert o Update nel db, il PreparedStatement è molto meglio e soprattuto ti aiuta nel "formattare" i dati in base al database in cui andrai ad inserire tale informazione.
    In particolare il metodo setDate ti permette di specificare un oggetto Date senza preoccuparti di come queste debba essere formattato per essere inserito nel database.
    Oltretutto il tuo Oracle accetta quel formato di dati, questo non è formato standard che tutti i database oracle accettano (di solito il formato di default dipende dal locale con cui è installato il db) quindi se poi magari ti capiterà di spostare il tuo programma su un database con diverso locale usando la tua metodologia avresti problemi con la portabilità cosa che invece non avviene se usi il PreparedStatement

  8. #8
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Comunque io ora ho questo:

    codice:
        // Azione da eseguire se clicco il pulsante "Cerca"
        private void pushButtonInserisciAction(ActionEvent event) throws SQLException, ParseException {
            String data;
            String giorno;
            String mese;
            String anno;
            
            //PreparedStatement inserisciPartita = null;
            //String query = "INSERT INTO PARTITA VALUES (?,?)";    
    
            giorno = giorniList.getSelectedItem().toString();
            //mese   = (String)mesiList.getSelectedItem();
            mese = "10";
            anno   = anniList.getSelectedItem().toString();
            data   = anno+"-"+mese+"-"+giorno;
            
            DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            java.util.Date choise = sdf.parse(data.toString());
            
            System.out.print("Data scelta: " + choise);
            //inserisciPartita.setDate(choise);
        }
    Ho provato a fare:
    codice:
            DateFormat sdf = new SimpleDateFormat("yyyy-MMM-dd");
    Ma in runtime il compilatore mi dà errore. Come posso risolvere?
    Con i sogni possiamo conoscere il futuro...

  9. #9
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    codice:
        private void pushButtonInserisciAction(ActionEvent event) throws SQLException, ParseException {
            String data;
            String giorno;
            String mese;
            String anno;
            int id_partita = 0;
            int new_partita;
            
            
            try {
            
            Statement statement = conn.createStatement();
            ResultSet rset = statement.executeQuery( "select MAX(ID_PARTITA) from PARTITA" );
            
            while ( rset.next() )
                id_partita = rset.getInt(1);
            rset.close();
            
            new_partita = id_partita+1;
            
            PreparedStatement inserisciPartita = null;
            String query = "INSERT INTO PARTITA VALUES (?,?)";    
    
            giorno = giorniList.getSelectedItem().toString();
            mese   = (String)mesiList.getSelectedItem().toString();
            anno   = anniList.getSelectedItem().toString();
            data   = anno+"-"+mese+"-"+giorno;
            
            DateFormat sdf = new SimpleDateFormat("yyyy-MMM-dd");
            java.util.Date choise = sdf.parse(data.toString());
            
            //System.out.print("Data scelta: " + choise);
            //System.out.print("Id partita da inserire: " + new_partita);
            inserisciPartita.setInt(1, new_partita);
            inserisciPartita.setDate(2, (Date)choise);
        
            JOptionPane.showMessageDialog(this, 
                                              "Partita inserita correttamente!",
                                              "Information",
                                              JOptionPane.INFORMATION_MESSAGE);  
            } catch ( SQLException e) {
                       JOptionPane.showMessageDialog(this, 
                                              "Errore nell'inserimento della partita! Verifica la connessione al db o chiedi all'amministratore!",
                                              "Errore",
                                              JOptionPane.ERROR_MESSAGE);   
            }
         }
    Il problema è chiaramente dato dalla seguente stringa:

    codice:
    inserisciPartita.setDate(2, (Date)choise);
    Per inserire una nuova partita nel db, la query dovrebbe essere così:

    codice:
    INSERT INTO PARTITA VALUES ( 3, "21-Nov-2012");
    Evidemente non ho quel tipo di formattazione, come risolvo?
    Con i sogni possiamo conoscere il futuro...

  10. #10
    il problema non è in come la formatti la data ma perchè fai quel cast...

    codice:
    inserisciPartita.setDate(2, (Date)choise);
    Risoluzione
    codice:
    inserisciPartita.setDate(2, new java.sql.Date(choise.getTime()));
    al resto ci pensa il PreparedStatement.

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.