தரவு வகைகள்

அட்டவணையைப் பார்ப்போம்:

"C:\Program Files\Java\jdk-17.0.3.1\bin\java.exe...
ஐடி java.lang. முழு எண் INT 4
பெயர் java.lang.string வர்ச்சர் 12
நிலை java.lang. முழு எண் INT 4
உருவாக்கப்பட்ட_தேதி java.sql.date DATE 91
வெளியேறும் குறியீடு 0 உடன் செயல்முறை முடிந்தது

மூன்றாவது நெடுவரிசையில் நாம் வகைகளைக் காண்கிறோம்: INT , VARCHAR , DATE . இவை SQL சர்வர் வகைகள். சர்வர் என்பது தனக்குத் தெரிந்த வகைகளுடன் தரவை வழங்குகிறது. இந்த வகைகள் எப்படி ஜாவா வகைகளாக மாற்றப்படுகின்றன?

JDBC உடன் தரப்படுத்தப்பட்ட விஷயங்களில் இதுவும் ஒன்று. SQL வகைகளின் பட்டியலை சரிசெய்வதன் மூலம் JDBCயின் படைப்பாளிகள் தொடங்கினார்கள். மாறிலிகளுடன் ஒரு சிறப்பு வகுப்பு உள்ளது:

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 வகைகளின் பட்டியலில் ஒரு ஐடி வகை. விரிவுரையின் தொடக்கத்தில் எடுத்துக்காட்டில் நீங்கள் பார்த்த எண்கள் இவை.

மேலும் ResultSet வகுப்பில் ஒரு தரவு வகையை மற்றொரு தரவு வகைக்கு மாற்றும் முறைகள் உள்ளன. எல்லா வகைகளையும் ஒன்றுக்கொன்று மாற்ற முடியாது, ஆனால் தர்க்கம் போதுமான அளவு தெளிவாக உள்ளது. உங்களுக்கான நல்ல விரிதாள் இதோ:

முறை SQL தரவு வகை
int getInt() எண், முழு எண், தசம
மிதவை getFloat() எண், முழு எண், தசமம், மிதவை, உண்மையானது
இரட்டை கெட் டபுள்() எண், முழு எண், தசமம், மிதவை, உண்மையானது
தேதி getDate() தேதி, நேரம், நேர முத்திரை
நேரம் கிடைக்கும் நேரம்() தேதி, நேரம், நேர முத்திரை
டைம்ஸ்டாம்ப் கெட் டைம்ஸ்டாம்ப்() தேதி, நேரம், நேர முத்திரை
சரம் getString() சார், வர்ச்சார்

அனைத்து SQL வகைகளிலும், சில குழுக்களை தெளிவாக வேறுபடுத்தி அறியலாம்:

  • எண்கள்
  • நேரம்
  • கோடுகள்
  • பைட் பொருள்கள்

மூலம், getInt() முறையை கவனித்தீர்களா ?

JDBC மற்றும் NULL

ResultSet வகுப்பின் getInt() முறையில் என்ன தவறு என்று கவனித்தீர்களா ? அதன் கையொப்பத்தை மீண்டும் பார்ப்போம்:

int getInt(column)

இந்த முறை ஒரு முழு எண்ணை வழங்குகிறது , ஒரு முழு எண்ணை அல்ல. ஏனெனில் JDBC வகை முழு எண் உருவாக்கப்பட்ட நேரத்தில், அது இன்னும் இல்லை. சரி, சொல்லுவோம். பின்னர் எனக்கு ஒரு கேள்வி உள்ளது:

INT NULL நிரலைக் கொண்ட தரவுத்தளத்தில் ஒரு அட்டவணை உள்ளது, அது INT ஆக இருக்கலாம் ஆனால் NULL ஆகவும் இருக்கலாம். இந்த நெடுவரிசையிலிருந்து பூஜ்ய மதிப்பை எவ்வாறு பெறுவது?

கவலைப்படாதே, எல்லாமே உனக்காகவே நினைத்திருக்கிறது.

தீர்வு ஒன்று . ஜாவாவில் உள்ள 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() முறையை அழைக்கும் போது அது பூஜ்யமாக திரும்ப வேண்டும் எனில், wasNull() முறை true என திரும்பும், இல்லையெனில் 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 , இது ஒரு புள்ளியை யுனிக்ஸ் டைம் வடிவத்தில் சேமிக்கிறது: 1970 ஆம் ஆண்டின் தொடக்கத்திலிருந்து மில்லி விநாடிகளின் எண்ணிக்கை.

எனவே, ஜேடிபிசி தரநிலையை உருவாக்கியவர்கள் ஜாவாவில் மேலும் மூன்று தரவு வகைகளைச் சேர்த்துள்ளனர் - குறிப்பாக ஜேடிபிசிக்கு:

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

எனவே ResultSet இடைமுகத்தின் முறைகள் நிலையான தரவு வகைகளைக் கொண்டிருக்கின்றன:

SQL வகை ஜாவா வகை முறை
DATE java.sql.date java.sql.date getDate()
நேரம் 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. முழு எண் INT 4
பெயர் java.lang.string வர்ச்சர் 12
நிலை java.lang. முழு எண் INT 4
உருவாக்கப்பட்ட_தேதி java.sql.date DATE 91
வெளியேறும் குறியீடு 0 உடன் செயல்முறை முடிந்தது

இங்கே என்ன இல்லை என்று யூகிக்கவா? Java DateTime API இல் தோன்றிய தரவு வகைகள்:

  • உள்ளூர் தேதி
  • உள்ளூர் நேரம்
  • உள்ளூர் தேதி நேரம்