वास्तव में क्या होता है यह जानने के लिए मैंने कुछ परीक्षण जेडीबीसी कोड को एक साथ रखा। परिणाम दिलचस्प थे। Oracle के तीन निकट से संबंधित डेटाटाइप हैं:TIMESTAMP
, टाइम ज़ोन के साथ टाइमस्टैम्प
, और स्थानीय समय क्षेत्र के साथ टाइमस्टैम्प
. मैंने ठीक वही कोड लिया, और इसे दो अलग-अलग बॉक्स से चलाया, एक "अमेरिका/न्यू_यॉर्क" टाइमज़ोन में, और एक यूटीसी पर चल रहा था। यूटीसी में चल रहे दोनों ने एक ही डेटाबेस को मारा। मैं Oracle 11.2.0.2.0 ड्राइवर का उपयोग कर रहा था।
- द
टाइमस्टैम्प
कॉलम जावा कोड को निष्पादित करने वाली मशीन पर जो कुछ भी स्थानीय समय था, उस पर सेट किया गया था। कोई समय क्षेत्र अनुवाद नहीं किया गया। - द
टाइम ज़ोन के साथ टाइमस्टैम्प
कॉलम ने समय को JDBC क्लाइंट के किसी भी समय क्षेत्र में अनुवादित किया। स्थानीय समय क्षेत्र के साथ टाइमस्टैम्प
कॉलम ने उस समय का भी अनुवाद किया, जिसमें JDBC क्लाइंट था।
यह लेख
, जो थोड़ा पुराना है, इंगित करता है कि TIMESTAMP with TIME ZONE
यदि आप अनुक्रमणिका या विभाजन जैसा कुछ करना चाहते हैं तो यह बहुत अधिक बेकार है। हालांकि, ऐसा लगता है कि स्थानीय समय क्षेत्र के साथ टाइमस्टैम्प
अत्यंत उपयोगी हो सकता है। (सुनिश्चित नहीं है कि यदि आप सर्वर का समय क्षेत्र बदलते हैं तो क्या होगा, लेकिन यह JDBC क्लाइंट के स्थानीय समय क्षेत्र के बारे में बुद्धिमान प्रतीत होता है)। मुझे इन डेटाटाइप के साथ इंडेक्सिंग व्यवहार आदि का परीक्षण करने का मौका नहीं मिला है।
यदि आप अपने परिवेश में मेरे परीक्षणों को पुन:प्रस्तुत करना चाहते हैं, तो नीचे मेरी नमूना कक्षा में पेस्ट करना।
आयात करें तालिका बनाएं x_tst_ts_tab(// os_name varchar(256)// ts टाइमस्टैम्प,// ts_with_tz टाइमस्टैम्प समय क्षेत्र के साथ,// ts_with_local_tz टाइमस्टैम्प स्थानीय समय क्षेत्र के साथ //) क्लास TSTest {सार्वजनिक स्थिर अंतिम शून्य मुख्य (स्ट्रिंग [] argv) फेंकता है अपवाद { Class.forName ("oracle.jdbc.OracleDriver"); कनेक्शन conn =DriverManager.getConnection ("your_connection_string", "your_user_name", "your_password"); कोशिश करें {// कुछ डेटा डालें दिनांक अभी दिनांक =नई तिथि (); टाइमस्टैम्प अब टाइमस्टैम्प =नया टाइमस्टैम्प (अब दिनांक। गेटटाइम ()); रेडीडस्टेटमेंट इंसर्टStmt =conn.prepareStatement ("इन्सर्ट INTO x_tst_ts_tab" + "(os_name, ts, ts_with_tz, ts_with_local_tz)" + "VALUES (?,?,?,?)"); कोशिश करें {insertStmt.setString(1, System.getProperty("os.name")); insertStmt.setTimestamp(2, nowTimestamp); insertStmt.setTimestamp(3, nowTimestamp); insertStmt.setTimestamp(4, nowTimestamp); insertStmt.executeUpdate (); } अंत में {कोशिश {insertStmt.close (); } कैच (थ्रोबल टी) {// कुछ भी न करें}} System.out.println ("os_name, ts, ts_with_tz, ts_with_local_tz"); // डीबी रेडीस्टेटमेंट में सब कुछ पढ़ें, चयन करेंस्टमटी =conn.prepareStatement ("ओएस_नाम, टीएस, ts_with_tz, ts_with_local_tz" + "डोम_फ्राउड_बीकॉन.x_tst_ts_tab से चुनें"); परिणामसेट परिणाम =शून्य; कोशिश करें {परिणाम =selectStmt.executeQuery (); जबकि (result.next ()) {System.out.println( String.format("%s,%s,%s,%s", result.getString(1), result.getTimestamp(2).toString() , result.getTimestamp(3).toString (), result.getTimestamp(4).toString() )); }} अंत में {कोशिश {result.close (); } कैच (थ्रोबल टी) {// कुछ भी न करें} अंत में {कोशिश करें {selectStmt.close (); } कैच (थ्रोबल टी) {// कुछ भी न करें}}}} अंत में {कोशिश करें {conn.close (); } कैच (थ्रोबल टी) {// कुछ भी न करें}}}}