2012-05-25 14 views
8

Mam bieżący JDBC datę i godzinę wstawić do bazy danych MySQL.Datetime w java

Przesyła bieżącą datę i stały czas do pola typu daty Mysql jako 2012/05/25 00:00:00. Część daty działa bardzo dobrze, ale czas nie pokazuje żadnej wartości.

jestem wstawienie wartości z następującego kodu:

java.util.Date myDate = new java.util.Date(); 
java.sql.Date sqlDate = new java.sql.Date(myDate.getTime()); 
PreparedStatement PStmt = con.prepareStatement(Sql query); 
PStmt.setDate(1,sqlDate); 
+0

Czy możesz wkleić kod wstawiający datę? Jakiego typu kolumnę użyłeś w bazie danych? – pablochan

+0

java.util.Date myDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date (myDate.getTime());
PreparedStatement PStmt = con.prepareStatement (zapytanie SQL);
PStmt.setDate (1, sqlDate); – Narayan

+0

Jaki jest typ kolumny w MySQL? – dbf

Odpowiedz

1

1) Użyj java.util.Date w swojej klasie języka Java.

2) Ustaw typatykę TIMESTAMP w mysql.

Date CreatedDate= new Date(System.currentTimeMillis()); 

Dla PreparedStatement: Może być tak:

PreparedStatement PStmt = con.prepareStatement(Sql query); 
PStmt.setDate(1,CreatedDate); 
+0

Co powinno być przygotowanym oświadczeniem dla tej createdDate – Narayan

+3

To nie działało dla mnie, ponieważ straciło czas. Użyj java.sql.Timestamp zamiast z setTimestamp (...) –

2

myślę, że trzeba mieć znacznik czasu jako typ kolumny w MySQL.

+0

DATETIME też może być w porządku – bpgergo

16

Zastosowanie java.sql.Timestamp zamiast java.util.Date

Na przykład, jeśli używasz PreparedStatement obsługiwać wkładkę, można przekazać swoją datę jako ;

java.util.Date date = new Date(); 
pst.setTimestamp(columIndex, new java.sql.Timestamp(date.getTime())); 
+0

+1: Problem polega na tym, że 'java.sql.Date' to * konkretnie * tylko data, a więc odrzuca składnik czasu. –

+0

Pokazuje błąd podczas próby wykonania instrukcji insert, tzn. Pokazuje błąd, gdy używam pstmt.executeupdate(); – Narayan

+0

Nie określiłeś błędu, który otrzymujesz, zakładam, że prosi o długo jako parametr - patrz edytowana odpowiedź. – Bitmap

1

Chociaż starego postu, odpowiedź jest prosta i zależy od Państwa wymagań - jak na swoje wymagania wykorzystać typ danych DATETIME i używać poniższego

java.util.Date date = new Date(); 
pst.setTimestamp(columIndex, new java.sql.Timestamp(date.getTime()).getTime()); 

Zobaczmy rozumowanie zarówno z bazy danych i strona jdbc.

Rozpocznij od typu danych w bazie danych i wybierz odpowiedni. Ten, który dokładnie pasuje do twojego przypadku, to DATETIME, jak chcesz datę i godzinę/min/sek. Typ DATETIME służy do przechowywania czasu zegara ściennego, natomiast TIMESTAMP ma stały punkt w czasie (kilka milisekund po epoce). Istnieje również różnica w sposobie, w jaki oba są przechowywane wewnętrznie w MySQL.

Teraz, gdy dojdziesz do strony JDBC masz metody API dla Data (tylko część daty), Datownik (data i czas) i Czas (tylko czas). To wszystko, co ma do zaoferowania JDBC. Więc teraz API, które pasuje do twoich potrzeb, to setTimestamp