Visualizzazione dei risultati da 1 a 5 su 5
  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
    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 Senior Java developer SCJP 5 (91%) SCWCD 5 (94%)
    Il mio nuovo sito-blog italiano sulla programmazione: andbin.it

  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
    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 Senior Java developer SCJP 5 (91%) SCWCD 5 (94%)
    Il mio nuovo sito-blog italiano sulla programmazione: andbin.it

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