डेटा के प्रकार

आइए एक नजर डालते हैं टेबल पर:

"सी: \ प्रोग्राम फ़ाइलें \ जावा \ jdk-17.0.3.1 \ बिन \ java.exe ...
पहचान java.lang.Integer int यहाँ 4
नाम java.lang.string वरचर 12
स्तर java.lang.Integer int यहाँ 4
सृजित दिनांक java.sql.date तारीख 91
प्रक्रिया निकास कोड 0 के साथ समाप्त हुई

तीसरे कॉलम में हम प्रकार देखते हैं: INT , VARCHAR , DATE । ये SQL सर्वर प्रकार हैं। सर्वर यानी की उन टाइप्स के साथ डाटा देता है जिनके बारे में उसे पता होता है। इन प्रकारों को जावा प्रकारों में कैसे परिवर्तित किया जाता है?

यह ठीक उन चीजों में से एक है जिसे JDBC के साथ मानकीकृत किया गया है। JDBC के रचनाकारों ने SQL प्रकारों की एक सूची तय करके शुरुआत की। स्थिरांक के साथ एक विशेष वर्ग है:

class java.sql.Types {
   public static final int CHAR         =   1;
   public static final int NUMERIC    	=   2;
   public static final int DECIMAL     	=   3;
   public static final int INTEGER      =   4;
   public static final int FLOAT        =   6;
   public static final int REAL         =   7;}

संख्या वर्ग में क्रम संख्या नहीं है, लेकिन SQL विनिर्देश में SQL प्रकारों की सूची में एक ID प्रकार है। ये वे संख्याएँ हैं जिन्हें आपने व्याख्यान के आरंभ में उदाहरण में देखा था।

साथ ही ResultSet क्लास में ऐसी विधियाँ हैं जो एक डेटा प्रकार को दूसरे में बदल सकती हैं। सभी प्रकारों को एक दूसरे में परिवर्तित नहीं किया जा सकता, लेकिन तर्क पर्याप्त स्पष्ट है। यहां आपके लिए एक अच्छी स्प्रेडशीट है:

तरीका एसक्यूएल डेटा प्रकार
int getInt () संख्यात्मक, पूर्णांक, दशमलव
फ्लोट गेटफ्लोट () संख्यात्मक, पूर्णांक, दशमलव, फ्लोट, वास्तविक
डबल गेटडबल () संख्यात्मक, पूर्णांक, दशमलव, फ्लोट, वास्तविक
दिनांक गेटडेट () दिनांक, समय, टाइमस्टैम्प
समय गेटटाइम () दिनांक, समय, टाइमस्टैम्प
टाइमस्टैम्प गेटटाइमस्टैम्प () दिनांक, समय, टाइमस्टैम्प
स्ट्रिंग गेटस्ट्रिंग () चार, वरचर

सभी SQL प्रकारों में, कुछ समूहों को स्पष्ट रूप से प्रतिष्ठित किया जा सकता है:

  • नंबर
  • समय
  • पंक्तियां
  • बाइट ऑब्जेक्ट्स

वैसे, क्या आपने getInt() विधि देखी है ?

जेडीबीसी और न्यूल

क्या आपने देखा है कि ResultSet क्लास की getInt() विधि में क्या गलत है ? आइए इसके हस्ताक्षर को फिर से देखें:

int getInt(column)

यह विधि एक int लौटाती है , पूर्णांक नहीं। क्योंकि जिस समय JDBC प्रकार Integer बनाया गया था, वह अभी तक अस्तित्व में नहीं था। ठीक है, कहते हैं। तब मेरा एक प्रश्न है:

मेरे पास एक डेटाबेस में एक टेबल है जिसमें एक INT NULL कॉलम है जो INT हो सकता है लेकिन NULL भी हो सकता है। मैं इस कॉलम से शून्य मान कैसे प्राप्त कर सकता हूं?

चिंता न करें, आपके लिए सब कुछ सोच लिया गया है।

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

समाधान दोआदिम प्रकार शून्य नहीं हो सकते हैं, इसलिए getInt() जैसी विधियाँ बस एक डिफ़ॉल्ट मान वापस कर देंगी । इंट के लिए यह 0 है, फ्लोट = 0.0 एफ के लिए, डबल = 0.0 डी और इसी तरह के लिए।

और फिर कैसे समझें कि कॉलम में क्या था: 0 या NULL? और पार्टी के पास इस सवाल का जवाब है।

समाधान तीन । ResultSet क्लास में एक विशेष wasNull() विधि होती है जो सत्य लौटाती है यदि विधि NULL के बजाय एक अलग मान लौटाती है

सब कुछ ठीक वैसा ही काम करता है जैसा मैंने यहां लिखा है। उदाहरण:

ResultSet results = staatement.executeQuery("SELECT * FROM user");
    int level = results.getInt("level");

if (results.wasNull()) {
    System.out.println("Level is null");
} else {
   System.out.println("Level is " + level);
    }

अगर getInt() मेथड को कॉल करते समय इसे वापस लौटना चाहिए था , तो wasNull() मेथड सही रिटर्न देगा, अन्यथा wasNull() मेथड गलत रिटर्न देगा।

यह न केवल आदिम प्रकारों के लिए काम करता है:

ResultSet results = staatement.executeQuery("SELECT * FROM user");
    String name = results.getString("name");

 	if (results.wasNull()) {
 	    System.out.println("Name is null");
 	} else {
 	   System.out.println("User name is " + name);
    }

यह बेशक एक बैसाखी है। लेकिन NullPointerException के साथ कोई समस्या नहीं है । हर चीज में सकारात्मकता देखें :)

जेडीबीसी में डेटा प्रकारों में क्या गलत है?

आइए परीक्षण जारी रखें। GetDate(column) मेथड को बारीकी से देखें ? उसको क्या हुआ है? इस विधि के निम्न प्रकार के परिणाम हैं:

java.sql.Date

यह अशक्त स्टोर कर सकता है, जो काफी अच्छा है। लेकिन फिर भी उसके साथ कुछ गलत है। संकेत! यहां बताया गया है कि सही दिनांक प्रकार कैसा दिखता है:

java.util.Date

उनके अलग-अलग पैकेज हैं! ये आम तौर पर विभिन्न प्रकार के डेटा होते हैं। और यहाँ कारण है...

20वीं शताब्दी के 70 के दशक से डेटाबेस समय भंडारण के लिए 3 प्रकार के डेटा का समर्थन करते हैं:

  • दिनांक - दिनांक संग्रहीत करता है: वर्ष, महीना, दिन।
  • समय - स्टोर समय: घंटे, मिनट, सेकंड।
  • TIMESTAMP - समय में एक विशिष्ट बिंदु संग्रहीत करता है: दिनांक, समय और मिलीसेकंड।

अपने अस्तित्व के पहले 10 वर्षों के लिए जावा भाषा में केवल एक डेटा प्रकार था, java.util.Date , जो UNIX TIME प्रारूप में समय में एक बिंदु संग्रहीत करता था: 1970 की शुरुआत से मिलीसेकंड की संख्या।

इसलिए, JDBC मानक के रचनाकारों ने जावा में तीन और डेटा प्रकार जोड़े - विशेष रूप से JDBC के लिए:

  • java.sql.date
  • java.sql.समय
  • java.sqlटाइमस्टैम्प

और इसलिए ResultSet इंटरफ़ेस के तरीकों में निश्चित डेटा प्रकार होते हैं:

एसक्यूएल प्रकार जावा प्रकार तरीका
तारीख java.sql.date java.sql.date getDate ()
समय java.sql.समय java.sql.Time गेटटाइम ()
TIMESTAMP java.sql.timestamp java.sql.Timestamp getTimestamp ()

और यह वह प्रकार है जो आप यहाँ देख रहे हैं:

"सी: \ प्रोग्राम फ़ाइलें \ जावा \ jdk-17.0.3.1 \ बिन \ java.exe ...
पहचान java.lang.Integer int यहाँ 4
नाम java.lang.string वरचर 12
स्तर java.lang.Integer int यहाँ 4
सृजित दिनांक java.sql.date तारीख 91
प्रक्रिया निकास कोड 0 के साथ समाप्त हुई

लगता है यहाँ क्या याद आ रही है? जावा डेटटाइम एपीआई में दिखाई देने वाले डेटा प्रकार:

  • लोकलडेट
  • स्थानीय समय
  • स्थानीय दिनांक समय