yyyy obtener ingresar guardar formato fecha como cambiar java jdbc prepared-statement

java - obtener - guardar fecha jcalendar en mysql



Declaración preparada de JDBC. setDate(...) no ahorra tiempo, solo la fecha... ¿Cómo puedo guardar el tiempo también? (3)

El tipo Java java.sql.Date se normalizará para representar solo una SQL DATE y no un instante de Tiempo. De la documentación API:

Para cumplir con la definición de SQL DATE, los valores de milisegundos envueltos por una instancia de java.sql.Date deben ''normalizarse'' al establecer las horas, minutos, segundos y milisegundos en cero en la zona horaria particular a la que está asociada la instancia. .

La normalización explica por qué está viendo 00:00:00 como el tiempo.

Si desea retener la información de tiempo, considere usar la clase Timestamp que puede representar tanto una fecha como una hora.

Obviamente, también debe usar los tipos de SQL correspondientes para definir la estructura de su tabla; si desea almacenar marcas de tiempo en la base de datos, use el tipo de SQL que prefiera su base de datos. Si bien algunas bases de datos y sus controladores JDBC pueden permitirle almacenar marcas de tiempo en columnas de DATE , es aconsejable usar el equivalente del tipo SQL TIMESTAMP si está disponible.

Tengo la siguiente consulta:

INSERT INTO users (user_id, date_created) VALUES (?,?)

Tengo la siguiente declaración preparada

PreparedStatement insertUser = dbConnection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); insertUser.setInt(1, 7); java.util.Date now = new java.util.Date(System.currentTimeMillis()); insertUser.setDate(2, new java.sql.Date((new Date(System.currentTimeMillis())).getTime())); insertUser.executeUpdate();

Si reviso la base de datos, me parece que está insertando solo la fecha de hoy, no la hora, por lo que sería: 2011-07-29 00:00:00

¿Qué debería poner en setDate() para obtener el tiempo también?


En SQLServerDatabase, defina la columna como SMALLDATETIME y en el lado de Java use

Timestamp sqlDate = new Timestamp( System.currentTimeMillis() ); preparedStmt.setTimestamp( ++startIndex, sqlDate );

En SQLServerDatabase, no especifique el tipo de columna como Timestamp, de lo contrario obtendrá la siguiente excepción.

No se puede insertar un valor explícito en una columna de marca de tiempo. Use INSERT con una lista de columnas para excluir la columna de marca de tiempo, o inserte un DEFAULT en la columna de marca de tiempo


En lugar de la fecha , debe usar una marca de tiempo y el método setTimestamp .

Prácticamente tienes que hacer algo como eso:

private static java.sql.Timestamp getCurrentTimeStamp() { java.util.Date today = new java.util.Date(); return new java.sql.Timestamp(today.getTime()); }

....

preparedStatement.setTimestamp(4,getCurrentTimeStamp());