Visualizzazione dei risultati da 1 a 5 su 5

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2018
    Messaggi
    18

    Inserimento data nel database errato

    Salve a tutti, ho un problema nell'inserimento di una data nel mio database my sql. Vengo al dunque
    ho questa porzione di codice:
    codice:
    else if(columnClass[i] == Date.class) {
        if(rs.getDate(columnNames[i])!=Date.valueOf((String.valueOf(data[i])))) {
            System.out.println("Date value of "+Date.valueOf(String.valueOf(data[i]))+" date column: "+rs.getDate(columnNames[i]));
    rs.updateDate(columnNames[i], Date.valueOf((String.valueOf(data[i]))));
    }
    che mi verifica che sia cambiata la data dalla rs ed il valore che ho nella jtable. Tuttavia ho due problemi. il primo è che entra nel primo if anche quando la data non è cambiata. ed il secondo alquanto strano che mi scrive la data nel db a meno di un giorno "2020-01-02" diventa "2020-01-01" non riesco a capire il problema. Nella println a video ho i due valori "uguali"

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da felx Visualizza il messaggio
    Tuttavia ho due problemi. il primo è che entra nel primo if anche quando la data non è cambiata. ed il secondo alquanto strano che mi scrive la data nel db a meno di un giorno "2020-01-02" diventa "2020-01-01" non riesco a capire il problema. Nella println a video ho i due valori "uguali"
    Partiamo dalla premessa che cose del tipo Date.valueOf((String.valueOf(data[i]))) hanno davvero veramente poco senso. E inoltre il confronto con != NON ha affatto senso (sono oggetti ... queste sono "basi" di Java ..).

    E comunque: da che cosa parti? (cosa è quel data[i] ?) Se parti con l'avere una stringa con la data da salvare su DB, allora: a) stabilisci in che formato l'utente deve inserire la data; b) usa poi un apposito DateFormat per "parsare" la stringa in un java.util.Date (SimpleDateFormat se è un formato personalizzato oppure il DateFormat ottenibile da uno dei metodi factory).
    E poi per vedere se è "diverso" si usa equals() (ovviamente in senso "negato": not equals).
    Ultima modifica di andbin; 28-01-2020 a 13:39
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2018
    Messaggi
    18
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Partiamo dalla premessa che cose del tipo Date.valueOf((String.valueOf(data[i]))) hanno davvero veramente poco senso. E inoltre il confronto con != NON ha affatto senso (sono oggetti ... queste sono "basi" di Java ..).

    E comunque: da che cosa parti? (cosa è quel data[i] ?) Se parti con l'avere una stringa con la data da salvare su DB, allora: a) stabilisci in che formato l'utente deve inserire la data; b) usa poi un apposito DateFormat per "parsare" la stringa in un java.util.Date (SimpleDateFormat se è un formato personalizzato oppure il DateFormat ottenibile da uno dei metodi factory).
    E poi per vedere se è "diverso" si usa equals() (ovviamente in senso "negato": not equals).
    Ciao grazie per la risposta il vettore data è un vettore di object. Ho sostituito il isequal per disperazione. Come sarebbe la sintassi giusta?
    Il dataformat è qullo di mysql che è yyyy-mm-dd
    Ultima modifica di felx; 28-01-2020 a 13:59

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da felx Visualizza il messaggio
    Ciao grazie per la risposta il vettore data è un vettore di object.
    Ok, è un Object[] . Ma quando entri in quel if(columnClass[i] == Date.class) l'oggetto REALE quale è? E' un java.util.Date o un String??

    Se fosse già un Date .. non devi fare alcun giro "strano" con i valueOf. È realmente un Date, quindi basta fare un banale cast:
    codice:
    rs.updateDate(columnNames[i], (Date) date[i]);

    Se fosse un String, va parsato in Date (come detto prima).

    Quote Originariamente inviata da felx Visualizza il messaggio
    Ho sostituito il isequal per disperazione. Come sarebbe la sintassi giusta?
    Ma non puoi andare avanti con "lacune" su queste basi di Java ...

    Quote Originariamente inviata da felx Visualizza il messaggio
    Il dataformat è qullo di mysql che è yyyy-mm-dd
    Quale sia il formato usato da MySQL, qui NON importa. Se usi updateDate, devi solo passare un Date (che NON ha un "formato" ... è solo un istante nel tempo al millisecondo). Come deve essere passato a MySQL è una questione che si gestisce il driver JDBC Connector/J di MySQL.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2018
    Messaggi
    18
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ok, è un Object[] . Ma quando entri in quel [I]if(columnClass == Date.class) l'oggetto REALE quale è? E' un java.util.Date o un String??

    Se fosse già un Date .. non devi fare alcun giro "strano" con i valueOf. È realmente un Date, quindi basta fare un banale cast:
    codice:
    rs.updateDate(columnNames[i], (Date) date[i]);

    Se fosse un String, va parsato in Date (come detto prima).


    Ma non puoi andare avanti con "lacune" su queste basi di Java ...


    Quale sia il formato usato da MySQL, qui NON importa. Se usi updateDate, devi solo passare un Date (che NON ha un "formato" ... è solo un istante nel tempo al millisecondo). Come deve essere passato a MySQL è una questione che si gestisce il driver JDBC Connector/J di MySQL.
    Ciao purtroppo non riesco a cavarci fuori. Sto impazzendo. Prendo una riga dalla jtable(che è quella selezionata)
    codice:
    Object[] modified=dataModel.getDataVector().get(row).toArray();
    Il column è questo
    codice:
    String[] richiamoColumns=new String[]{"ID", "Data", "CF", "Descrizione"};
    Class<?>[] richiamoColumnClass=new Class<?>[]{Integer.class, Date.class, String.class, String.class};
    Object[] richiamoDefaultValues=new Object[]{999, date, "AAAAAAAAAAAAAAAAA", "rthjtj"};
    Chiamo una metodo updaterow(modified,row) dove row è l'indice di riga selezionata.
    mi sposto alla riga selezionata
    [/CODE]rs.absolute(row+1);[CODE]
    dove scorrendo la rsset confronto le classi
    codice:
    else if(columnClass[i] == Date.class) {
    else if(columnClass[i] == Date.class) {
        if(!rs.getDate(columnNames[i]).equals(data[i])){
           rs.updateDate(columnNames[i],Date.valueOf((String) data[i]));
    Mi inserisce la data, ma se la data è 2020-01-02 mi inserisce il giorno prima non capisco cosa ci sia
    Ultima modifica di felx; 28-01-2020 a 17:51

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