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.
- usiamo sql server 2012.
- 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:
- Stiamo usando "data" tipo di dati, non "datetime" tipo di dati. In base a questo https://msdn.microsoft.com/en-us/library/bb630352.aspx, "0001-01-01" non è fuori intervallo per il campo "data".
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.
Provare a utilizzare un'altra data per rappresentare la data vuota come 1900/01/01 – sagi
Avere una rapida occhiata al codice sorgente di '.valueOf (...)';) – Hannes
Quali driver JDBC JAR stai usando? jTDS o Microsoft? E quale versione? –