2010-05-18 13 views
17

में मैं कहाँ में समय-चिह्न के साथ PreparedStatement उपयोग कर रहा हूँ खंड:PreparedStatement और setTimestamp ओरेकल JDBC

PreparedStatement s=c.prepareStatement("select value,utctimestamp from t where utctimestamp>=? and utctimestamp<?"); 
s.setTimestamp(1, new Timestamp(1273017600000L)); //2010-05-05 00:00 GMT 
s.setTimestamp(2, new Timestamp(1273104000000L)); //2010-05-06 00:00 GMT 
ResultSet rs = s.executeQuery(); 
if(rs.next()) System.out.println(rs.getInt("value")); 

परिणाम मैं अलग है, जब मैं क्लाइंट कंप्यूटर पर विभिन्न समय क्षेत्रों की है। क्या यह ओरेकल जेडीबीसी में एक बग है? या सही व्यवहार?

ओरेकल डेटाबेस संस्करण 10.2 है और मैंने ऑरैकल जेडीबीसी पतली ड्राइवर संस्करण 10.2 और 11.1 के साथ प्रयास किया है।

पैरामीटर टाइमस्टैम्प है, और मुझे उम्मीद है कि रास्ते पर कोई भी समय रूपांतरण नहीं किया जाएगा। डेटाबेस कॉलम प्रकार DATE है, लेकिन मैंने इसे उसी परिणाम के साथ TIMESTAMP कॉलम प्रकार के साथ भी चेक किया है।

क्या सही परिणाम प्राप्त करने का कोई तरीका है? मैं पूरे एप्लिकेशन में यूटीसी में डिफ़ॉल्ट टाइमज़ोन नहीं बदल सकता।

आपकी मदद

+0

कृपया अपना प्रश्न संपादित करें और t_begin और t_end के प्रकार जोड़ें। –

उत्तर

22

यूटीसी समय क्षेत्र में एक PreparedStatement में समय स्टांप मान सेट करने के लिए धन्यवाद एक का उपयोग करना चाहिए

stmt.setTimestamp(1, t, Calendar.getInstance(TimeZone.getTimeZone("UTC"))) 

टाइमस्टैम्प मान हमेशा यूटीसी है, लेकिन हमेशा नहीं JDBC ड्राइवर स्वचालित रूप से इसे भेजा जा सकता है सर्वर के लिए सही ढंग से। तीसरा, कैलेंडर, पैरामीटर ड्राइवर को सर्वर के लिए मूल्य को सही तरीके से तैयार करने में मदद करता है।

+3

असल में, यह है: setTimestamp (int पैरामीटर इंडेक्स, टाइमस्टैंप एक्स, कैलेंडर कैल) – rhu

+1

मेरे पर्यावरण में एक अलग समय क्षेत्र के साथ कैलेंडर ऑब्जेक्ट सेट करने पर SQL डेटा पर लिखा गया है। – Robert

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