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

    SqLite inserimento data

    Ciao Ragazzi, ho un problema. Ho creato una tabella :

    Codice PHP:
                    String sql " " +
                            
    " CREATE TABLE utenti" +
                            
    "( "+
                            
    " 'ID' INT AUTO_INCREMENT PRIMARY KEY, "+
                            
    " 'NOME' VARCHAR(255) NULL DEFAULT NULL, "+
                            
    " 'DATA' DATE NULL DEFAULT NULL "+
                            
    ") "
    Faccio un banale inserimento:
    Codice PHP:
                    String sqlInsert "insert into utenti" +
                            
    "(NOME,DATA) " +
                            
    "values ('Test','"+new Date()+"')"
    Però quando vado a recuperare il record, la data me la torna come stringa, cosa sbaglio? Grazie mille

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Alexander_37 Visualizza il messaggio
    codice:
                    String sqlInsert = "insert into utenti" +
                            "(NOME,DATA) " +
                            "values ('Test','"+new Date()+"')";
    Innanzitutto concatenare il risultato del toString() (che è un formato fisso, in inglese) sull'oggetto Date creato al volo lì nella stringa ... NON è affatto una buona/bella cosa. E poi sei sicuro che il formato fisso del toString() di Date sia appropriato per SQLite??

    In generale, per "iniettare" valori in uno statement in modo appropriato si usa di norma un PreparedStatement.

    Tra l'altro se vuoi solo inserire la data "corrente", tutti i DBMS hanno sicuramente una function apposita che dà la data/ora corrente. Tipo now() o qualcosa del genere a seconda.
    Dalla documentazione ufficiale: https://www.sqlite.org/lang_datefunc.html

    C'è es.:
    SELECT date('now');


    Quote Originariamente inviata da Alexander_37 Visualizza il messaggio
    Però quando vado a recuperare il record, la data me la torna come stringa
    E come lo tiri fuori dal ResultSet? Con getString() ? (ovvio che dà un String). Con getDate() ? O getTimestamp() ?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ciao Andbin grazie sempre per le tue risposte . La concatenazione della Data si così è brutto da vere (ma è soltanto per fare una prova) , per quanto riguarda il PreparedStatement, con sqLite non posso usarlo, perchè vuole per forza uno Statement .

    Quando invece tiro fuori il record con ResultSet, ho provato a usare sia il Date che il Timestamp ma niente da fare. Ho dovuto tirarlo fuori come Object o come Stringa e poi fare il SimpleFormat. A me servirebbe il Date sul DB perchè devo fare delle query con le date

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Alexander_37 Visualizza il messaggio
    per quanto riguarda il PreparedStatement, con sqLite non posso usarlo, perchè vuole per forza uno Statement .
    Ma che piattaforma è? PC ... o Android? Se è Android ... non ho in effetti idea, dovrei documentarmi (e potrebbe essere come dici). Su PC (quindi Java SE standard), se si usa un driver JDBC valido e appropriato, non vedo perché non si possa usare PreparedStatement.

    Quote Originariamente inviata da Alexander_37 Visualizza il messaggio
    ho provato a usare sia il Date che il Timestamp ma niente da fare.
    Che vuol dire? Se hai ottenuto un oggetto java.sql.Date o java.sql.Timestamp l'istante nel tempo contenuto è quello che ti aspetti? Attenzione: NON stare a fissarti sul fatto che se stampi (con un banale println) un Date o Timestamp ottieni una data in un certo formato. Quello, lo ripeto, è solo perché il loro toString() fornisce solo un formato fisso e ben preciso.
    Un "istante" nel tempo lo puoi successivamente formattare in stringa come ti pare (con DateFormat/SimpleDateFormat).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Hmmm credo di aver fatto confusione io. Ho visto che quando salvo in SqlLite un Date o un Timestamp, inserisce il long time e non l'intera data . Basta che mi recupero il dato con getLong e lo passo nel costruttore del Date .

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Alexander_37 Visualizza il messaggio
    Ho visto che quando salvo in SqlLite un Date o un Timestamp, inserisce il long time e non l'intera data
    Nessun DBMS "serio" tiene fisicamente memorizzata su disco una data in stringa. Una data in stringa è solo una (delle possibili) rappresentazione fornita o riconosciuta. Nei DBMS i date types sono tipicamente di pochi byte, 4 o 8 e sono appunto dei "numeri". Concettualmente sono dei millisecondi (o microsecondi) a partire da un certo istante noto nel tempo.
    Stop.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Si, scusa non sapevo questo. Ho sempre lavorato su MYSQL e li viene salvata l'intera data. Grazie mille come sempre

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Alexander_37 Visualizza il messaggio
    Ho sempre lavorato su MYSQL e li viene salvata l'intera data.
    In MySQL è la stessa cosa, i tipi per date/time sono solo dei numeri binari di pochi byte. Poi a seconda del tipo di dato puoi mantenere solo la data, solo l'ora o entrambe le cose.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Hmm ah, allora è Hibernate che al getDate da direttamente la data, farà lui la conversione ok, ora mi è tutto più chiaro

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Alexander_37 Visualizza il messaggio
    allora è Hibernate che al getDate da direttamente la data, farà lui la conversione
    Non è tanto Hibernate .... ma il driver JDBC che sta più "sotto" che sa come gestire queste cose. Poi certo ... anche Hibernate può fare qualche mappatura in più (tipo: settare direttamente un java.util.Date in un bean da una query).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.