डेटा प्रकार

चला टेबलवर एक नजर टाकूया:

"C:\Program Files\Java\jdk-17.0.3.1\bin\java.exe...
आयडी java.lang.Integer INT 4
नाव java.lang.string वरचार १२
पातळी java.lang.Integer INT 4
निर्मित_तारीख java.sql.date DATE ९१
एक्झिट कोड 0 सह प्रक्रिया पूर्ण झाली

तिसऱ्या स्तंभात आपण प्रकार पाहतो: INT , VARCHAR , DATE . हे SQL सर्व्हरचे प्रकार आहेत. सर्व्हर म्हणजे ज्या प्रकारांबद्दल त्याला माहिती आहे त्या प्रकारांसह डेटा देतो. हे प्रकार Java प्रकारांमध्ये कसे रूपांतरित केले जातात?

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 प्रकारांच्या सूचीमधील आयडी प्रकार आहे. व्याख्यानाच्या सुरुवातीला तुम्ही उदाहरणामध्ये पाहिलेले हे अंक आहेत.

तसेच रिझल्टसेट क्लासमध्ये अशा पद्धती आहेत ज्या एका डेटा प्रकाराला दुसऱ्यामध्ये रूपांतरित करू शकतात. सर्व प्रकार एकमेकांमध्ये रूपांतरित केले जाऊ शकत नाहीत, परंतु तर्क पुरेसे स्पष्ट आहे. तुमच्यासाठी ही एक चांगली स्प्रेडशीट आहे:

पद्धत SQL डेटा प्रकार
int getInt() संख्यात्मक, पूर्णांक, दशांश
फ्लोट getFloat() संख्यात्मक, पूर्णांक, दशांश, फ्लोट, वास्तविक
दुहेरी getDoublel() संख्यात्मक, पूर्णांक, दशांश, फ्लोट, वास्तविक
तारीख मिळण्याची तारीख() DATE, TIME, TIMESTAMP
वेळ getTime() DATE, TIME, TIMESTAMP
टाइमस्टॅम्प मिळवा टाइमस्टॅम्प() DATE, TIME, TIMESTAMP
स्ट्रिंग getString() चार, वरचार

सर्व SQL प्रकारांमध्ये, काही गट स्पष्टपणे ओळखले जाऊ शकतात:

  • संख्या
  • वेळ
  • ओळी
  • बाइट वस्तू

तसे, तुम्ही getInt() पद्धत लक्षात घेतली आहे का ?

JDBC आणि NULL

ResultSet वर्गाच्या getInt() पद्धतीत काय चूक आहे हे तुमच्या लक्षात आले आहे का ? त्याची स्वाक्षरी पुन्हा पाहू:

int getInt(column)

ही पद्धत int परत करते , पूर्णांक नाही. कारण JDBC प्रकार पूर्णांक तयार झाला तेव्हा तो अस्तित्वात नव्हता. ठीक आहे, म्हणूया. मग मला एक प्रश्न आहे:

माझ्याकडे डेटाबेसमध्ये एक टेबल आहे ज्यामध्ये INT NULL स्तंभ आहे जो INT असू शकतो परंतु NULL देखील असू शकतो. मी या स्तंभातून शून्य मूल्य कसे मिळवू शकतो?

काळजी करू नका, तुमच्यासाठी सर्व गोष्टींचा विचार केला गेला आहे.

उपाय एक . जर Java मधील SQL प्रकार तारीख किंवा स्ट्रिंग सारख्या संदर्भ प्रकाराने दर्शविला असेल तर कोणतीही समस्या नाही . या प्रकारातील व्हेरिएबल्स शून्य मूल्ये घेऊ शकतात.

उपाय दोन . आदिम प्रकार शून्य असू शकत नाहीत, त्यामुळे getInt() सारख्या पद्धती फक्त डीफॉल्ट मूल्य परत करतील . int साठी ते 0 आहे, float = 0.0f साठी, दुहेरी = 0.0d आणि सारखे आहे.

आणि मग स्तंभात काय आहे हे कसे समजून घ्यावे: 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() मेथडला कॉल करताना null रिटर्न करायचा असेल , तर 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 सह कोणतीही समस्या नाही . प्रत्येक गोष्टीत सकारात्मकता पहा :)

JDBC मधील डेटा प्रकारांमध्ये काय चूक आहे?

चला चाचणी सुरू ठेवूया. getDate(स्तंभ) पद्धतीकडे बारकाईने पहा ? त्याचे काय बिघडले आहे? या पद्धतीमध्ये खालील प्रकारचे परिणाम आहेत:

java.sql.Date

ते शून्य संचयित करू शकते, जे पुरेसे चांगले आहे. पण तरीही, त्याच्यामध्ये काहीतरी चूक आहे. सुगावा! योग्य तारीख प्रकार कसा दिसतो ते येथे आहे:

java.util.Date

त्यांची वेगवेगळी पॅकेजेस आहेत! हे सामान्यतः भिन्न प्रकारचे डेटा आहेत. आणि हे आहे कारण...

20 व्या शतकाच्या 70 च्या दशकापासूनचे डेटाबेस वेळ संचयित करण्यासाठी 3 प्रकारच्या डेटाचे समर्थन करतात:

  • DATE - तारीख संग्रहित करते: वर्ष, महिना, दिवस.
  • TIME - वेळ साठवतो: तास, मिनिटे, सेकंद.
  • TIMESTAMP - वेळेत विशिष्ट बिंदू संग्रहित करतो: तारीख, वेळ आणि मिलिसेकंद.

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

म्हणून, JDBC मानकाच्या निर्मात्यांनी Java मध्ये आणखी तीन डेटा प्रकार जोडले - विशेषतः JDBC साठी:

  • java.sql.date
  • java.sql.Time
  • java.sqlTimestamp

आणि म्हणून ResultSet इंटरफेसच्या पद्धतींमध्ये निश्चित डेटा प्रकार असतात:

SQL प्रकार जावा प्रकार पद्धत
DATE java.sql.date java.sql.date getDate()
TIME java.sql.Time java.sql.Time getTime()
टाइमस्टॅम्प java.sql.timestamp java.sql.Timestamp getTimestamp()

आणि हा प्रकार तुम्ही येथे पाहत आहात:

"C:\Program Files\Java\jdk-17.0.3.1\bin\java.exe...
आयडी java.lang.Integer INT 4
नाव java.lang.string वरचार १२
पातळी java.lang.Integer INT 4
निर्मित_तारीख java.sql.date DATE ९१
एक्झिट कोड 0 सह प्रक्रिया पूर्ण झाली

येथे काय गहाळ आहे अंदाज? Java DateTime API मध्ये दिसणारे डेटा प्रकार:

  • LocalDate
  • स्थानिक वेळ
  • स्थानिक तारीख वेळ