2015-10-02 23 views
5

Voglio inserire "0001-01-01" come valore in un campo data utilizzando Java PreparedStatement.JDBC4 inserire la data "0001-01-01"

Ma getta eccezione quando ho provato questo:

String sql = "insert into mytable values(?)" 
ps = conn.prepareStatement(sql); 
ps.setDate(1, java.sql.Date.valueOf("0001-01-01")); 
ps.executeUpdate(); // throws exceptions here. 

L'errore è:

Il valore fornito non è un'istanza valida del tipo di dati datetime. Controlla i dati di origine per i valori non validi. Un esempio di valore non valido è costituito da dati di tipo numerico con scala maggiore della precisione.

  • Se io non uso PreparedStatement, posso inserire "0001-01-01". Tuttavia, la dichiarazione di preparazione sembra non consentirmi di inserire questo valore.

  • Funzionerà se ho inserito "1969-01-01" anziché "0001-01-01".

Qualche idea?

Aggiornamenti: Ecco ulteriori informazioni che potrebbero essere necessarie.

  1. usiamo sql server 2012.
  2. dobbiamo usare "0001-01-01", perché questi valori erano già lì. Sto cambiando alcuni codici molto molto vecchi per usare la dichiarazione di preparazione. Quindi devo inserire gli stessi valori nella stessa funzionalità.

Aggiornamenti 2:

Inoltre, sono in grado di inserire "0001-01-01" nel campo della data senza utilizzare la dichiarazione di preparazione. Ad esempio

String sql = "insert into mytable values('0001-01-01')" 
    java.sql.Statement statement = conn.createStatement(); 
    statement.executeUpdate(sql); 

Quindi non è il problema del server sql o del campo db.

+0

Provare a utilizzare un'altra data per rappresentare la data vuota come 1900/01/01 – sagi

+0

Avere una rapida occhiata al codice sorgente di '.valueOf (...)';) – Hannes

+1

Quali driver JDBC JAR stai usando? jTDS o Microsoft? E quale versione? –

risposta

0

Hai provato con nuovo java.sql.Date (nuovo Data (1,1,1))?

+0

Ho appena provato questo. Innanzitutto la nuova data (1,1,1) è deprecata. In secondo luogo, funziona senza errori, ma memorizza 1900-01-01 anziché 0001-01-01. – Joey

0

Provare a utilizzare il diverso driver JDBC adatto.