2010-07-24 2 views
46

में MySQL datetimes टाइमस्टैम्प हैंडलिंग एक जावा आवेदन में क्या होगा extracing और datetimes टाइमस्टैम्प का मिश्रण का उपयोग कर एक MySQL डेटाबेस के साथ तारीख की जानकारी inputting के मामले में एक अच्छा समझौता?जावा

उत्तर

90

जावा पक्ष में, तिथि आमतौर पर का प्रतिनिधित्व करती है (खराब तरीके से तैयार है, लेकिन वह एक तरफ) java.util.Date। यह मूल रूप से एक long के स्वाद, यह भी एक टाइमस्टैम्प के रूप में जाना में Epoch time द्वारा समर्थित है। इसमें दिनांक और समय दोनों भागों के बारे में जानकारी शामिल है। जावा में, परिशुद्धता मिलीसेकंड में है।

एसक्यूएल पक्ष में, वहाँ कई मानक दिनांक और समय प्रकार, DATE, TIME और TIMESTAMP (कम से कुछ डीबी के भी DATETIME कहा जाता है) कर रहे हैं, के रूप में java.sql.Date, java.sql.Time और java.sql.Timestamp, सभी उपवर्गों java.util.Date की JDBC में प्रतिनिधित्व कर रहे हैं। परिशुद्धता डीबी निर्भर है, अक्सर जावा जैसे मिलीसेकंड में, लेकिन यह सेकंड में भी हो सकती है।

java.util.Date के विपरीत, java.sql.Date में दिनांक भाग (वर्ष, महीना, दिन) के बारे में केवल जानकारी है। Time (घंटे, मिनट, सेकंड) समय भाग के बारे में केवल जानकारी है और Timestamp की तरह के रूप में java.util.Date करता है, दोनों भागों के बारे में जानकारी शामिल है।

डीबी में समय स्टांप स्टोर करने के लिए सामान्य अभ्यास (इस प्रकार, जावा पक्ष में java.util.Date और JDBC पक्ष में java.sql.Timestamp) PreparedStatement#setTimestamp() उपयोग करने के लिए है।

java.util.Date date = getItSomehow(); 
Timestamp timestamp = new Timestamp(date.getTime()); 
preparedStatement = connection.prepareStatement("SELECT * FROM tbl WHERE ts > ?"); 
preparedStatement.setTimestamp(1, timestamp); 

डीबी से एक टाइमस्टैम्प प्राप्त करने के लिए सामान्य अभ्यास ResultSet#getTimestamp() उपयोग करने के लिए है।

Timestamp timestamp = resultSet.getTimestamp("ts"); 
java.util.Date date = timestamp; // You can just upcast. 
+6

आपको लगता है कि (जावा परत) मॉडल में java.sql.Timestamp का उपयोग कर बुरा है? – cherouvim

+7

@cherouvim: हाँ। मॉडल किसी भी जेडीबीसी विनिर्देशों से अवगत नहीं होना चाहिए। टाइमस्टैम्प सेट करने के लिए केवल इसका इस्तेमाल करें। 'readyStatement.setTimestamp (नया टाइमस्टैम्प (date.getTime()));'। इसे प्राप्त करना आसान है क्योंकि यह पहले से ही 'java.util.Date' का उप-वर्ग है। – BalusC

+1

यह ठीक काम करेगा यदि आपकी सभी मशीनें और उपयोगकर्ता एक ही समय क्षेत्र में हैं। अन्यथा, टाइमस्ऑन रूपांतरणों के MySQL जेडीबीसी ड्राइवर के हैंडलिंग से सावधान रहें अविश्वसनीय रूप से जटिल और छोटी गाड़ी है। उदाहरण के लिए http: // stackoverflow देखें।कॉम/प्रश्न/40670532/what-are-jdbc-mysql-driver-settings-for-sane-handling-of-datetime-and-timestamp/40681941 # 40681941 –

6

MySQL documentation जावा प्रकार के मानचित्रण MySQL प्रकार के बारे में जानकारी नहीं है। सामान्य रूप से, MySQL डेटाटाइम और टाइमस्टैम्प के लिए आपको java.sql.Timestamp का उपयोग करना चाहिए। कुछ संसाधनों में शामिल हैं:

http://dev.mysql.com/doc/refman/5.1/en/datetime.html

http://www.coderanch.com/t/304851/JDBC/java/Java-date-MySQL-date-conversion

How to store Java Date to Mysql datetime...?

http://www.velocityreviews.com/forums/t599436-the-best-practice-to-deal-with-datetime-in-mysql-using-jdbc.html

संपादित करें:

के रूप में दूसरों को संकेत दिया है, तार का उपयोग करने का सुझाव समस्याएं हो सकती हैं।

+0

तिथियों को स्ट्रिंग में परिवर्तित करना बेहतर क्यों होगा? – cherouvim

+6

इसे स्ट्रिंग के रूप में आगे और पीछे मालिश न करें। पोर्टेबिलिटी और रखरखाव की समस्या के लिए यह नुस्खा है। – BalusC

+0

सहमत हुए। मैंने तदनुसार अपना जवाब संशोधित कर दिया है। – Garett