Invalid data conversion

di Anonimizzato25427 il
7 risposte
Buongiorno,
sono impegnato nel realizzare un servizio che preleva una serie di dati dal db.
Nella query trovo un
"CHAR(DATE(P.DATAESEMPIO),EUR) as myDate"
Nella mia classe il campo myDate è di tipo java.util.Date e quando vado a testare il servizio:
"Invalid data conversion: Parameter instance 20.11.2008 is invalid for the requested conversion to java.sql.Timestamp"
Suggerimenti su come risolvere? ci ho perso un bel po' di tempo e non ne sono uscito...

7 Risposte

  • WinstonSmith ha scritto:


    sono impegnato nel realizzare un servizio che preleva una serie di dati dal db.
    Quale DBMS innanzitutto?

    WinstonSmith ha scritto:


    Nella mia classe il campo myDate è di tipo java.util.Date
    A parte il tuo campo, cosa stai usando per l'accesso al DB? Direttamente JDBC, cioè dal ResultSet?
  • andbin ha scritto:



    Quale DBMS innanzitutto?

    A parte il tuo campo, cosa stai usando per l'accesso al DB? Direttamente JDBC, cioè dal ResultSet?
    DB2, un RDBMS. Sì, esattamente.
  • Scusate,conosco pochissimo java,ma il valore TimeStamp non dovrebbe essere un valore in millisecondi?
  • WinstonSmith ha scritto:


    DB2, un RDBMS.
    Ok

    WinstonSmith ha scritto:


    Sì, esattamente.
    Ok, tieni presente innanzitutto che il ResultSet NON tira fuori oggetti che sono esattamente dei java.util.Date ma solo i tipi temporali in java.sql. Poi è vero che queste classi Date/Time/Timestamp estendono java.util.Date.

    Comunque, c'è una cosa dubbia:

    "CHAR(DATE(P.DATAESEMPIO),EUR) as myDate"

    Cosa è quel EUR? Direi che sta cercando di "formattare" la data!! Ma a) NON serve di per sé, b) NON è comunque il formato appropriato per le classi in java.sql.

    Quindi: hai solo una data (niente orario!)? Allora innanzitutto devi usare getDate() del ResultSet, non getTimestamp().
    Poi a livello di query, non serve "formattare" in stringa. Basta che la colonna estratta sia veramente del tipo "date".

    Pertanto (pur NON conoscendo DB2) si può provare:

    ........ DATE(P.DATAESEMPIO) as myDate ...........

    e basta.
  • WinstonSmith ha scritto:



    Ok, tieni presente innanzitutto che il ResultSet NON tira fuori oggetti che sono esattamente dei java.util.Date ma solo i tipi temporali in java.sql. Poi è vero che queste classi Date/Time/Timestamp estendono java.util.Date.

    Comunque, c'è una cosa dubbia:

    "CHAR(DATE(P.DATAESEMPIO),EUR) as myDate"

    Cosa è quel EUR? Direi che sta cercando di "formattare" la data!! Ma a) NON serve di per sé, b) NON è comunque il formato appropriato per le classi in java.sql.

    Quindi: hai solo una data (niente orario!)? Allora innanzitutto devi usare getDate() del ResultSet, non getTimestamp().
    Poi a livello di query, non serve "formattare" in stringa. Basta che la colonna estratta sia veramente del tipo "date".

    Pertanto (pur NON conoscendo DB2) si può provare:

    ........ DATE(P.DATAESEMPIO) as myDate ...........

    e basta.
    La query non è mia e non posso toccarla, non so perché va ad eseguire quelle operazioni che sembrano un po' inutili per quello che dobbiamo fare. E sì, solo data e niente orari.

    Grazie per l'indicazione!
  • WinstonSmith ha scritto:


    La query non è mia e non posso toccarla
    Allora se dà qualcosa tipo "20.11.2008" devi estrarla dal ResultSet come String e poi "parsarla" tu lato Java.
    Non vedo altro di più sensato.

    WinstonSmith ha scritto:


    quelle operazioni che sembrano un po' inutili
    Sì pare pure a me .... (mi viene da pensare che quella colonna in uscita sia stata messa così per essere visualizzata/usata così come è come stringa ... )
  • andbin ha scritto:



    Sì pare pure a me ....
    Ed infatti alla fine dopo mezza giornata sono stato autorizzato a modificare la query. Ricordavano di averlo già fatto.
Devi accedere o registrarti per scrivere nel forum
7 risposte