Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
Gestione dei campi datetime e time di MySql
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
ZioCrick
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 19/05/19 11:20
Messaggi: 89

MessaggioInviato: 18 Giu 2025 13:37    Oggetto: Gestione dei campi datetime e time di MySql Rispondi citando

Amici cari,
ho un problemino che sembra semplice ma ci sto cozzando la testa da settimane! Embarassed

Qualcuno gentilmente mi sa dire come si fa in Java a convertire una stringa "2025-06-18 12:29" per salvarla in un campo datetime di MySql e una stringa "12:30" per salvarla in un campo time di MySql ?
Ovviamente anche come fare il contrario.
Grazie.
Top
Profilo Invia messaggio privato HomePage
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 12:16
Messaggi: 11806
Residenza: Tokelau

MessaggioInviato: 18 Giu 2025 16:39    Oggetto: Rispondi citando

spiega cosa hai tentato e cosa hai ottenuto, perché mi sembra strano che tu non possa usare semplicemente la stringa in formato ISO direttamente nel tuo SQL statement Confused
Top
Profilo Invia messaggio privato HomePage
ZioCrick
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 19/05/19 11:20
Messaggi: 89

MessaggioInviato: 18 Giu 2025 17:48    Oggetto: Rispondi citando

Allora, in teoria è semplice.
Parlo del primo campo da gestire.
In una form ho un campo in cui l'utente (cioè io) deve introdurre una data, e un altro in cui inserisce ora e minuti.
Io li prelevo da programma e li compongo nella stringa che ho riportato "2025-06-18 12:29".

Poi tramite una PreparedStatement eseguo il executeUpdate per aggiornare un record di una tabella MySql.

Siccome ormai da anni uso MySql tramite i Recorset ho preparato una serie di metodi a cui passo un ArrayList<String> con i campi da aggiornare e un ArrayList<Object> con i valori da assegnare ad ogni campo.
Ho un metoto che mi costruisce la query e mi formatta i valori tramite la PreparedStatement.

Il problema è che non ho capito se per scrivere in un campo MySql di tipo datetime devo usare una variabile java di tipo java.util.Date o java.sql.Date o java.sql.Timestamp.

Inoltre sembra, se non ho sbagliato qualcosa nei vari passaggi da un metodo ad un altro che il instanceof java.sql.Date non funzioni e lo riconosca sempre come java.util.Date per cui mi tronca le ore e i minuti.

Spero di aver chiarito meglio la situazione anche capisco che senza vedere il codice non è semplice, ma riportare qui tutti i metodi coinvolti sarebbe troppo. Sad
Top
Profilo Invia messaggio privato HomePage
jack.mauro
Dio minore
Dio minore


Registrato: 07/02/15 17:44
Messaggi: 534

MessaggioInviato: 18 Giu 2025 18:27    Oggetto: Rispondi citando

Scrivendo le query direttamente (e quindi trasformando le date in stringa per comporre l'sql) dovrebbe funzionare così, supponendo dataevento di tipo DATETIME:

Codice:
INSERT INTO eventi (data_evento) VALUES ('2025-06-18 19:00:00');
UPDATE eventi SET data_evento = '2025-06-18 20:30:00' WHERE id = 1;

INSERT INTO eventi (data_evento) VALUES (STR_TO_DATE('18/06/2025 19:00:00', '%d/%m/%Y %H:%i:%s'));
UPDATE eventi SET data_evento = STR_TO_DATE('18/06/2025 20:30:00', '%d/%m/%Y %H:%i:%s') WHERE id = 1;


Ovviamente senza conoscere il tuo "framework" per preparare le query è difficile essere più precisi...
Top
Profilo Invia messaggio privato
ZioCrick
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 19/05/19 11:20
Messaggi: 89

MessaggioInviato: 18 Giu 2025 19:07    Oggetto: Rispondi citando

Bravo Mauro! Very Happy
Hai percepito giusto, perché sto cercando di realizzare un programma che mi gestisca la mia agenda, perché ho esigenze particolari e non voglio usare nulla sul web.
Infatti sto litigando con l'inserimento e la modifica della data e la durata di un evento.

Di fatto le istruzioni SQL che hai scritto vanno benissimo usando phpMyAdmin per agire direttamente sul db MySql.

Da java invece, come ho cercato di spiegare prima, utilizzo i recordset, e quindi creo la query da programma e la passo al PreparedStatement che esegue la executeUpdate, ma prima devo formattare i campi in funzione del tipo di campo, quindi passo ad un mio metodo un argomento con la PreparedStatement e uno con un ArrayList<Object> che contiene i valori da assegnare ai campi della query.
In questo metodo uso dei test del tipo:
Codice:
if (aoWhrVal.get(jj) instanceof java.sql.Time) {
    ps.setTime(jj+1, (java.sql.Time) aoWhrVal.get(jj));
}
dove jj è l'indice del aoWhrVal che è l'ArrayList<Object> che contiene i valori dei campi.
Ma sembra che se uso instanceof java.util.Date mi taglia la parte di ore e minuti, se invece uso instanceof java.sql.Date non me la riconosce.
Top
Profilo Invia messaggio privato HomePage
jack.mauro
Dio minore
Dio minore


Registrato: 07/02/15 17:44
Messaggi: 534

MessaggioInviato: 19 Giu 2025 09:52    Oggetto: Rispondi citando

Non conosco Java ne i PreparedStatement, ma anziché setDate (che setta la sola data senza ora) e setTime (che setta la sola ora senza la data) penso tu debba usare setTimestamp anche se la colonna è datetime e non timestamp su mysql.

Codice:
LocalDateTime dateTime = LocalDateTime.of(2025, 6, 19, 14, 30);
Timestamp timestamp = Timestamp.valueOf(dateTime);
ps.setTimestamp(..., timestamp);


Ciao
Mauro
Top
Profilo Invia messaggio privato
ZioCrick
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 19/05/19 11:20
Messaggi: 89

MessaggioInviato: 21 Giu 2025 10:28    Oggetto: Rispondi

Dopo varie prove, modifiche e ...bip... Evil or Very Mad bip...
credo di aver risolto usando in java:
il tipo java.sql.Timestamp per il campo MySql DateTime
il tipo java.sql.Time per il campo MySql Time.
Al momento sembra funzionare. Wink
Top
Profilo Invia messaggio privato HomePage
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi