Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [JSP] Problema con INSERT

    Salve, ho sviluppato un piccolo software di gestione per il mio ufficio, prima lo usavo solo io adesso visto che non fa proprio schifo lo volevo mettere in rete quindi traducendolo in jsp.
    Innanzitutto visto che adesso lo useremo in 4-5 persone e vista la mole di dati ho deciso che access non va più bene, ed ho rifatto il db in mysql.
    Adesso però ho un problema che prima non mi si presentava, l'inserimento delle date all'intenro del db. Infatti devo inserire una serie di dati tipo nome cognome ecc in più una data.
    Purtroppo ho fatto varie prove ma non riesco proprio. Vi posto il codice.

    ricevo dal form
    codice:
    String nome = request.getParameter("nome");
    String accettazione = request.getParameter("accettazione");
    a questo punto traduco la stringa in formato data

    codice:
    String simpleFormat = "yyyy/MM/dd";
    SimpleDateFormat formatter = new SimpleDateFormat(simpleFormat);
    Date dataConvertita = null;
    dataConvertita = formatter.parse(accettazione);
    QUindi se stampo le due date è tutto ok, logicamente nel form faccio inserire una data tipo yyyy/MM/dd.

    A questo punto voglio inserire i miei dati nel db e faccio
    codice:
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        connection = DriverManager.getConnection(url,dbUser,dbPasswd);
    
        //crea lo statement
        statement = connection.createStatement();
    
    
        //esegue l'inserimento
        int esito = statement.executeUpdate("INSERT INTO utentidb.utenti (nome,cognome,data_accettazione) value (('"+ nome +"'),('"+ cognome +"'),('"+ dataConvertita +"'))");
        
        
        if (esito == 1)
           out.println("inserimento eseguito correttamente");
        else
           out.println("inserimento non eseguito");
    Ma l'inserimento non va a buon fine, dove sbaglio??
    Ho provato anche con #"+ dataConvertita +"# ma non va...

    Poi visto che ci sono vorrei approfittare (vista la mia poca praticità con questo linguaggio)
    Ma se nel form volessi farmi inserire una data gg/mm/aaaa e poi trasformarla in formato data da poter inserire nel db come posso fare?
    Trovo sempre ostico lavorare con le date purtroppo. C'è qualche guida o articolo da cui posso prender spunto che sia in italiano?

    Grazie anticipatamente.

    Francesco

  2. #2
    Io partirei con l'usare un preparedStatement per semplificare la Insert, poi basta che inserisci una data del tipo java.sql.Date invece della classica java.util.Date.

    Per il secondo problema non saprei, il costruttore Date(int,int,int) è deprecato

  3. #3
    Scusa l'ignoranza ma cosa significa
    "poi basta che inserisci una data del tipo java.sql.Date invece della classica java.util.Date"?

    Grazie per la risposta

  4. #4
    Ho cercato si seguire i tuoi consigli, adesso credo che quello che mi manca è proprio capire cosa intendevi dirmi con java.sql.Date invece della classica java.util.Date.

    Il recupero della data, la trasformazione da stringa a data è uguale, ti posto il codice che ho modificato

    codice:
        statement = connection.createStatement();
        PreparedStatement pst = null;
        pst = connection.prepareStatement("INSERT INTO db.utenti (nome,cognome,nascita) value ((?),(?),(?))");
        pst.setString(1, nome);
        pst.setString(2,cognome);
        pst.setDate(3,dataConvertita);
        pst.executeUpdate();
        pst.close();
        connection.close();
    L'errore è:
    symbol : method setDate(int,java.util.Date)
    location: interface java.sql.PreparedStatement
    pst.setDate(3,dataConvertita);
    ^

    Credo che il codice sopra sia giusto almeno spero.

    Grazie Francesco

  5. #5
    Devi convertire la tua Date nel formato supportato da SQL,
    in particolare dovresti fare una cosa di questo tipo.

    java.sql.Date datasql=new java.sql.Date(dataConvertita.getTime());
    pst.setDate(3,datasql);

  6. #6
    Per il problema della formattazione corretta della data nel form puoi usare un controllo javascript che utilizza le espressioni regolari. Al submit della form lanci questa funzione, che ritorna true o false in base all'esito del controllo:

    Codice PHP:
    <script type="text/javascript">
    <!--
    function 
    validateDate(fld) {
        var 
    RegExPattern = /^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;
        var 
    errorMessage 'Formato data non corretto, oppure data non valida';
        if ((
    fld.value.match(RegExPattern)) && (fld.value!='')) {
            return 
    true;
        } else {
            
    alert(errorMessage);
            
    fld.focus();
            return 
    false;
        } 
    }
    //-->
    </script> 
    Al mio segnale... scatenate l'inferno!

  7. #7
    Non so dove sbaglio sinceramente, ma non riesco a capire, anche seguendo i vostri aiuti purtroppo non giungo a niente.
    Il campo del db è settato come "date" non è che devo metterlo come "datetime"?

    Comunque il codice per l'insert è il seguente....

    codice:
        String nascita = request.getParameter("nascita");
        
        String simpleFormat = "yyyy/MM/dd";
        SimpleDateFormat formatter = new SimpleDateFormat(simpleFormat);
        Date dataConvertita = null;
        dataConvertita = formatter.parse(nascita);
    
        java.sql.Date datasql = new java.sql.Date(dataConvertita.getTime());
    
     
        Connection connection;
        //Statement statement;
        //ResultSet result;
    
        connection = DriverManager.getConnection(url,dbUser,dbPasswd);
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        
       
        PreparedStatement pst = null;
        pst = connection.prepareStatement("INSERT INTO db.utenti (nome,cognome,nascita) value (?,?,?)");
        pst.setString(1, nome);
        pst.setString(2,cognome);
        pst.setDate(3,datasql);
        pst.executeUpdate();
        pst.close();
        connection.close();
    facendo varie prove ho notato che l'insert si blocca proprio sulla data.
    Qualcuno sa dirmi dove sbaglio?

    Grazie comunque per i preziosi consigli Francesco

  8. #8
    Grazie per l'aiuto adesso tutto sembra funzionare bene. La soluzione?
    Ho preso questo codice, lo copiato ed incollato in un'altra jsp e sebra che tutto funzioni.
    Volevo chiedervi due cose. Una è che spesso mi capita che quando compilo il progetto mi genera degli errori nella scheda "bundled tomcat"

    ...\.netbeans\5.5.1\apache-tomcat-5.5.17_base\work\Catalina\localhost\WebApplication 1\org\apache\jsp\prepared_jsp.java:110: '.class' expected

    altre volte no sempre con lo stesso progetto. Non so puo essere che qualche cosa non si sia installata bene?

    Un'altra domanda è, ma vado bene usando i driver odbc di mysql? o meglio usare il jconnector di mysql?

    Grazie ancora per gli aiuti

    Francesco

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 © 2026 vBulletin Solutions, Inc. All rights reserved.