2011-08-10 6 views
6

डेटाबेस में मेरे कॉलम प्रकार TIMESTAMP की है, इसलिए मेरी कक्षा इस तरह प्रकार Datetime का गुण है में ResultSet से दिनांक समय हो रही है:JdbcTemplate

public void setDiscoveryDate(final DateTime discoveryDtTm) { 
     this.discoveryDtTm = discoveryDtTm; 
    } 
JdbcTemplate में

अब मैं इसे प्राप्त करना चाहते हैं तो इस तरह की कुछ कोड, :

variant.setDiscoveryDate(rs.getTimestamp("discovery_dt_tm")); 

जो काम नहीं करता क्योंकि स्तंभ resultset के लिए मिलता है, मैं कुछ है कि दिनांक समय रिटर्न नहीं मिल सकता है, मैं केवल या तो getDate या getTime देखा।

साथ

उत्तर

13

ऐसा इसलिए है क्योंकि DateTime एक मानक जावा प्रकार नहीं है। आप JodaTime प्रकार की चर्चा करते हुए कर रहे हैं, तो यह प्रयास करें:

variant.setDiscoveryDate(
    new DateTime(rs.getTimestamp("discovery_dt_tm").getTime()) 
); 

यह rs.getTimestamp रिटर्न null है, तो आप छोटे बयान में इस को तोड़ने और null के लिए चेक जोड़ना चाहते हैं, तो टूट जाएगा।

ध्यान दें कि यह आसान बनाया जा सकता है, के बाद से DateTime के निर्माता एक java.util.Date लेता है, जो Timestamp का एक उपवर्ग है:

variant.setDiscoveryDate(
    new DateTime(rs.getTimestamp("discovery_dt_tm")) 
); 

लेकिन यह भी गलत है, Timestamp वर्ग के खराब डिजाइन के कारण (देखें स्पष्टीकरण के लिए javadoc)।

(getTime() के साथ)

+0

धन्यवाद, इसलिए हम अभी भी .getTime() के साथ केवल टाई प्राप्त कर रहे हैं और इसे नए डेटटाइम में भेज रहे हैं, फिर क्या तारीख को प्रसन्नता हो रही है? – Bohn

+1

@BDotA: 'Timestamp.getTime() 'का बुरी तरह नाम दिया गया है - यह 1 जनवरी 1 9 70 से मिलीसेकंड देता है, और इसमें दिनांक और समय दोनों भाग शामिल हैं। – skaffman

+0

rs.getTimestamp() डेटाबेस से कच्चे मान को वापस कर देगा, लेकिन * JVM * के समय क्षेत्र में। यदि आप डेटाबेस में यूटीसी मानों को संग्रहीत करते हैं, तो नया डेटटाइम (rs.getTimestamp()) गलत मान वापस लौटाएगा - यूटीसी ऑफसेट जो भी हो, ऑफसेट करें। –

1

प्रयास करें:

variant.setDiscoveryDate(new DateTime(rs.getTimestamp("discovery_dt_tm").getTime())); 
+0

धन्यवाद, क्यों "getMillis()" पहला उदाहरण के साथ छड़ी? – Bohn

संबंधित मुद्दे