நடப்பு வரியை நிர்வகித்தல்

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

வினவல் முடிவில் பல்வேறு வகையான ஆயிரக்கணக்கான வரிசைகள் மற்றும் நூற்றுக்கணக்கான நெடுவரிசைகள் இருக்கலாம், எனவே இது நீங்கள் நினைப்பது போல் சாதாரணமான பணி அல்ல. எடுத்துக்காட்டாக, படங்களை தரவுத்தளத்தில் சேமிக்கலாம், பின்னர் நீங்கள் ஒரு பைட்டுகளின் தொகுப்பாக ஒரு படத்தைப் பெறலாம் அல்லது அதைப் பதிவிறக்க ஒரு InputStream .

ஆனால் நாம் எளிமையானவற்றுடன் தொடங்குவோம் - " தற்போதைய முடிவு வரி " என்ற கருத்துடன் . இதன் விளைவாக பொதுவாக நிறைய வரிசைகள் இருப்பதால், பொருள்முடிவு தொகுப்புஉள்ளே தற்போதைய வரிக்கு ஒரு சுட்டிக்காட்டி உள்ளது. அடுத்த() முறையைப் பயன்படுத்தி அவற்றைப் படிக்க வரிகளை தொடர்ச்சியாக மாற்றுகிறது .

இந்த அணுகுமுறை முதன்மையாக தேர்வுமுறைக்காக செய்யப்படுகிறது. JDBC டிரைவர் தரவுத்தளத்தில் இருந்து சரங்களை நீங்கள் தொடர்ந்து படிக்கும் வரை ஏற்றாமல் இருக்கலாம். நீங்களும் FileInputStream ஐ ஆரம்பம் முதல் இறுதி வரை தொடர்ந்து படிக்கவும். எனவே இந்த அணுகுமுறை உங்களுக்கு நன்கு தெரிந்ததாகவும் புரிந்துகொள்ளக்கூடியதாகவும் இருக்க வேண்டும்.

இருப்பினும், உங்களுக்கு உண்மையிலேயே தேவைப்பட்டால், RandomAccessFile வகுப்பைப் பயன்படுத்தி கோப்புகளை எங்கும் படிக்கலாம் .

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

முறை விளக்கம்
1 அடுத்தது() அடுத்த வரிக்கு மாறவும்
2 முந்தைய () முந்தைய வரிக்கு மாறவும்
3 முதல்() நடப்பு வரி முதலில்?
4 முதலில் முதல்() நாம் முதல் வரிக்கு முன்னால் இருக்கிறோமா?
5 கடைசி() நடப்பு வரி கடைசியா?
6 கடைசிக்குப் பிறகு() நாங்கள் காலக்கெடுவிற்குப் பிறகு இருக்கிறோமா?
7 முழுமையான (int n) Nவது வரியை மின்னோட்டமாக்குகிறது
8 உறவினர் (int n) தற்போதைய வரி N நிலைகளை முன்னோக்கி நகர்த்துகிறது. N <0 ஆக இருக்கலாம்
9 getRow() வரி எண்ணை வழங்கும்

முறைகள் மிகவும் எளிமையானவை, ஆனால் இரண்டு விளக்கங்கள் செய்யப்பட வேண்டும். முடிவுகள், இருபுறமும் வெற்று கோடுகளால் கட்டமைக்கப்பட்டுள்ளன. எனவே, ஆரம்பத்தில் தற்போதைய வரி முடிவின் முதல் வரிக்கு முன் உள்ளது. முதல் வரிசையைப் பெற, அடுத்த() முறையை ஒருமுறையாவது அழைக்க வேண்டும் .

கடைசி வரிசையில் அடுத்த() முறையை நீங்கள் அழைத்தால் , கடைசி வரிக்குப் பிறகு நீங்கள் வரிக்குச் சென்றுவிட்டீர்கள் . நீங்கள் அதிலிருந்து தரவைப் படிக்க முடியாது, ஆனால் எந்த பிழையும் ஏற்படாது. இங்கே isAfterLast() முறையானது உண்மை என அறிவிக்கும்.

உதாரணமாக:

Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery("SELECT * FROM user");

System.out.println( results.getRow() );        	// 0
System.out.println( results.isBeforeFirst() );  // true
System.out.println( results.isFirst() );          	// false

results.next();

System.out.println( results.getRow() );        	// 1
System.out.println( results.isBeforeFirst() );  // false
System.out.println( results.isFirst() );          	// true

results.next();

System.out.println( results.getRow() );        	// 2
System.out.println( results.isBeforeFirst() );  // false
System.out.println( results.isFirst() );          	// false

தற்போதைய வரிசையில் இருந்து தரவைப் பெறுதல்

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

getType(numberColumns)

இருப்பினும், நெடுவரிசைக்கு ஒரு பெயர் இருந்தால், நீங்கள் நெடுவரிசையின் பெயரையும் பெறலாம்:

getType(nameColumns)

உதாரணமாக:

while (results.next()) {
        	Integer id = results.getInt(“id”);
        	String name = results.getString(“name”);
        	System.out.println(results.getRow() + ". " + id + "\t"+ name);
}

SQL தரவு வகைகள் மற்றும் ResultSet முறைகளை இணைக்க உதவும் அட்டவணையை கீழே தருகிறேன்:

SQL தரவு வகை getXXX() முறைகள்
சார் getString()
வர்ச்சர் getString()
INT getInt()
மிதவை getDouble()
கிளப் getClob()
BLOB getBlob()
DATE getDate()
நேரம் getTime()
நேர முத்திரை கெட் டைம்ஸ்டாம்ப்()

விஷயம், உங்களுக்கு புரிந்திருக்கும் என்று நினைக்கிறேன்.

ResultSet பற்றிய பல்வேறு தரவைப் பெறுதல்

தற்போதைய வரியிலிருந்து தரவை எவ்வாறு படிப்பது என்பதை நாங்கள் கண்டுபிடித்தோம்: நெடுவரிசை எண் மற்றும் அதன் பெயரால். மூலம், நெடுவரிசையின் பெயரை அதன் எண்ணின் மூலம் நான் எவ்வாறு கண்டுபிடிப்பது? அல்லது முடிவில் உள்ள நெடுவரிசைகளின் எண்ணிக்கையா?

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

ஜேடிபிசிக்கு இதற்கான சிறப்புப் பொருள் உள்ளது, ResultSetMetaData இடைமுகம் . இந்த வகை பொருளைப் பெறுவது மிகவும் எளிது:

Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery("SELECT * FROM user");
ResultSetMetaData resultSetMetaData = results.getMetaData();

ResultSetMetaData இடைமுகம் சில சுவாரஸ்யமான முறைகளைக் கொண்டுள்ளது. கீழே மிகவும் பிரபலமானவை:

1 getColumnCount() முடிவு நெடுவரிசைகளின் எண்ணிக்கையை வழங்குகிறது
2 getColumnName(int column) நெடுவரிசையின் பெயரை வழங்கும்
3 getColumnLabel(int column) நெடுவரிசையின் விளக்கத்தை வழங்குகிறது
4 getColumnType() நெடுவரிசை வகையை வழங்கும்: எண் (சிறப்பு குறியீடு)
5 getColumnTypeName() திரும்பும் நெடுவரிசை வகை: சரம்
6 getColumnClassName() நெடுவரிசை வகைக்கான ஜாவா கிளாஸ் பெயரை வழங்குகிறது
7 getTableName() அட்டவணையின் பெயரை வழங்கும்
8 getCatalogName() நெடுவரிசையின் கோப்பகத்தின் பெயரை வழங்குகிறது
9 getSchemaName() தரவுத்தளத்தின் திட்டப் பெயரை வழங்கும்
10 isAutoIncrement(int column) நெடுவரிசை தானியங்கு அதிகரிப்பை ஆதரிக்கிறதா?
பதினொரு Nullable() ஒரு நெடுவரிசையில் NULL இருக்க முடியுமா?

எங்கள் அட்டவணையைப் பற்றி கொஞ்சம் அறிய இதைப் பயன்படுத்துவோம்:

ResultSetMetaData metaData = results.getMetaData();
int columnCount = metaData.getColumnCount();
for (int column = 1; column <= columnCount; column++)
{
        	String name = metaData.getColumnName(column);
        	String className = metaData.getColumnClassName(column);
        	String typeName = metaData.getColumnTypeName(column);
        	int type = metaData.getColumnType(column);

        	System.out.println(name + "\t" + className + "\t" + typeName + "\t" + type);
}

முக்கியமான! நெடுவரிசைகள் 1 இலிருந்து எண்ணப்பட்டிருப்பதைக் கவனியுங்கள். வரிசைகளும் கூட. அது எவ்வளவு அசாதாரணமானது, இல்லையா?

நிரலை இயக்கிய பிறகு எனக்கு கிடைத்த முடிவு இதுதான்:

"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 உடன் செயல்முறை முடிந்தது