ResultSet అనుకూలీకరణ

ఆధునిక JDBC API మీరు వస్తువులను గొప్పగా అనుకూలీకరించడానికి అనుమతిస్తుంది.ప్రకటనమరియుఫలితం సెట్. ఉదాహరణకు, ఉపయోగించడంఫలితం సెట్మీరు డేటాబేస్లో అడ్డు వరుసలను మార్చవచ్చు.

స్టేట్‌మెంట్ ఆబ్జెక్ట్‌ను క్రియేట్ చేస్తున్నప్పుడు, మన కోరికల సమూహాన్ని దానిలోకి పంపవచ్చు. ఈ కోరికలను మూడు గ్రూపులుగా విభజించవచ్చు:

  • బేస్ కనెక్షన్ రకం
  • ఏకకాల యాక్సెస్ నియంత్రణ
  • పట్టుదల మరియు లావాదేవీలు

వస్తువును సృష్టించేటప్పుడు ఈ పారామితులను పాస్ చేయవచ్చుప్రకటనలేదాసిద్ధం చేసిన ప్రకటన. ఉదాహరణ:

Statement statement = connection.createStatement(
    ResultSet.TYPE_FORWARD_ONLY,
    ResultSet.CONCUR_READ_ONLY,
    ResultSet.CLOSE_CURSORS_OVER_COMMIT );

PreparedStatement statement = connection.prepareStatement(sql,
    ResultSet.TYPE_FORWARD_ONLY,
    ResultSet.CONCUR_READ_ONLY,
    ResultSet.CLOSE_CURSORS_OVER_COMMIT);

మేము ఈ విషయాలను లోతుగా అధ్యయనం చేయము, కానీ మీరు వేరొకరి కోడ్‌లో ఇలాంటివి కనిపిస్తే ఇది సాధ్యమవుతుందని నేను తెలుసుకోవాలనుకుంటున్నాను.

ఫలితాల సెట్ రకాలు

ResultSet నిర్దిష్ట రకంగా ఉండవచ్చు. రకం రిజల్ట్‌సెట్ యొక్క కొన్ని లక్షణాలు మరియు సామర్థ్యాలను నిర్వచిస్తుంది.

అన్ని డేటాబేస్‌లు మరియు JDBC డ్రైవర్‌లు అన్ని రకాలకు మద్దతు ఇవ్వవు. మీరు ఉపయోగించాలనుకుంటున్న రకానికి మద్దతు ఇస్తుందో లేదో చూడటానికి మీరు మీ డేటాబేస్ మరియు JDBC డ్రైవర్‌ని తనిఖీ చేయాలి. DatabaseMetaData.supportsResultSetType(int రకం) పద్ధతి ఇచ్చిన రకానికి మద్దతు ఇస్తుందా లేదా అనేదానిపై ఆధారపడి ఒప్పు లేదా తప్పును అందిస్తుంది .

వ్రాసే సమయంలో, ఫలితాల సెట్లో మూడు రకాలు ఉన్నాయి:

  • ఫలితం సెట్.TYPE_FORWARD_ONLY
  • ResultSet.TYPE_SCROLL_INSENSITIVE
  • ResultSet.TYPE_SCROLL_SENSITIVE

డిఫాల్ట్ రకం TYPE_FORWARD_ONLY.

TYPE_FORWARD_ONLY అంటే రిజల్ట్‌సెట్‌ను ముందుకు మాత్రమే తరలించవచ్చు. అంటే, మీరు అడ్డు వరుస 1, అడ్డు వరుస 2, అడ్డు వరుస 3 మొదలైన వాటి నుండి మాత్రమే కదలగలరు. ఫలితాల సెట్‌లో, మీరు వెనుకకు కదలలేరు: పదవది చదివిన తర్వాత మీరు 9వ వరుస నుండి డేటాను చదవలేరు.

TYPE_SCROLL_INSENSITIVE అంటే ఫలితాల సెట్‌ని ముందుకు లేదా వెనుకకు తరలించవచ్చు (స్క్రోల్ చేయవచ్చు). మీరు ప్రస్తుత స్థానానికి సంబంధించి స్థానానికి కూడా మారవచ్చు లేదా సంపూర్ణ స్థానానికి వెళ్లవచ్చు.

ResultSet తెరిచినప్పుడు ఈ రకమైన రిజల్ట్‌సెట్ అంతర్లీన డేటా మూలానికి మార్పులకు సున్నితంగా ఉంటుంది . అంటే, రిజల్ట్‌సెట్‌లోని ఎంట్రీని మరొక థ్రెడ్ లేదా ప్రాసెస్ ద్వారా డేటాబేస్‌లో మార్చినట్లయితే, అది ఇప్పటికే తెరిచిన వాటిలో ప్రతిబింబించదుఫలితం సెట్ఈ రకం.

TYPE_SCROLL_SENSITIVE అంటే ఫలితాల సెట్‌ని ముందుకు లేదా వెనుకకు తరలించవచ్చు (స్క్రోల్ చేయవచ్చు). మీరు ప్రస్తుత స్థానానికి సంబంధించి స్థానానికి కూడా మారవచ్చు లేదా సంపూర్ణ స్థానానికి వెళ్లవచ్చు.

ఈ రకమైన రిజల్ట్‌సెట్ రిజల్ట్‌సెట్ తెరిచినప్పుడు అంతర్లీన డేటా సోర్స్‌లో మార్పులకు సున్నితంగా ఉంటుంది . అంటే, రిజల్ట్‌సెట్‌లోని ఎంట్రీని మరొక థ్రెడ్ లేదా ప్రాసెస్ ద్వారా డేటాబేస్‌లో మార్చినట్లయితే, అది ఇప్పటికే తెరిచిన వాటిలో ప్రతిబింబిస్తుందిఫలితం సెట్ఈ రకం.

కరెన్సీ

ResultSet యొక్క సమ్మేళనం ResultSetని నవీకరించవచ్చా లేదా చదవగలదా అని నిర్ణయిస్తుంది.

కొన్ని డేటాబేస్‌లు మరియు JDBC డ్రైవర్‌లు ResultSetని నవీకరించడానికి మద్దతిస్తాయి, కానీ అన్నీ కాదు. DatabaseMetaData.supportsResultSetConcurrency(int concurrency) పద్ధతి ఇచ్చిన కాన్‌కరెన్సీ మోడ్‌కు మద్దతిస్తుందా లేదా అనేదానిపై ఆధారపడి ఒప్పు లేదా తప్పును అందిస్తుంది .

ResultSet సమ్మతి యొక్క రెండు స్థాయిలలో ఒకదాన్ని కలిగి ఉంటుంది:

  • ResultSet.CONCUR_READ_ONLY
  • ResultSet.CONCUR_UPDATABLE

CONCUR_READ_ONLY అంటే రిజల్ట్‌సెట్ మాత్రమే చదవబడుతుంది.

CONCUR_UPDATABLE అంటే రిజల్ట్‌సెట్‌ని చదవవచ్చు మరియు సవరించవచ్చు.

డేటాబేస్లో డేటాను మార్చడానికి ఒక ఉదాహరణ

ఈ పారామితులతో, మీరు రూపొందించబడిన స్టేట్‌మెంట్ మరియు దాని ఫలితాల సెట్‌ను నియంత్రించవచ్చు.

ఉదాహరణకు, మీరు అప్‌డేట్ చేయగల రిజల్ట్‌సెట్‌ను సృష్టించవచ్చు మరియు డేటాబేస్‌ను మార్చడానికి దాన్ని ఉపయోగించవచ్చు. ప్రకటనను రూపొందించేటప్పుడు, కింది షరతులను గమనించడం ముఖ్యం:

  • ఒక పట్టిక మాత్రమే పేర్కొనబడింది
  • క్లాజుల వారీగా చేరడం లేదా సమూహాన్ని కలిగి ఉండదు
  • ప్రశ్న నిలువు వరుసలు తప్పనిసరిగా ప్రాథమిక కీని కలిగి ఉండాలి

పై షరతులు నెరవేరినప్పుడు, డేటాబేస్‌లో పట్టికను నవీకరించడానికి నవీకరించబడిన ResultSet ఉపయోగించబడుతుంది. స్టేట్‌మెంట్ ఆబ్జెక్ట్‌ను సృష్టించేటప్పుడు, మీరు ఈ క్రింది పారామితులను పేర్కొనాలి:

Statement st = createStatement(Result.TYPE_SCROLL_INSENSITIVE, Result.CONCUR_UPDATABLE)

అటువంటి స్టేట్‌మెంట్‌ను అమలు చేయడం వల్ల వచ్చే ఫలితం అప్‌డేట్ చేయగల ఫలితం సెట్. ResultSet కర్సర్‌ను మీరు అప్‌డేట్ చేయాలనుకుంటున్న అడ్డు వరుసకు తరలించి, ఆపై updateXXX() పద్ధతికి కాల్ చేయడం అప్‌డేట్ పద్ధతి .

నవీకరణXXX పద్ధతి getXXX() పద్ధతి వలె పనిచేస్తుంది . నవీకరణXXX() పద్ధతి రెండు పారామితులను కలిగి ఉంది. మొదటిది నవీకరించబడిన నిలువు వరుస సంఖ్య, ఇది నిలువు వరుస పేరు లేదా క్రమ సంఖ్య కావచ్చు. రెండవది అప్‌డేట్ చేయవలసిన డేటా మరియు ఈ డేటా రకం XXX వలె ఉండాలి.

వాస్తవానికి డేటాబేస్లో అడ్డు వరుసను నవీకరించడానికి, మీరు ResultSet కర్సర్ మారిన అడ్డు వరుస నుండి నిష్క్రమించే ముందు updateRow() పద్ధతికి కాల్ చేయాలి , లేకపోతే మార్పులు డేటాబేస్లోకి రావు.

మీరు పట్టికకు కొత్త అడ్డు వరుసలను కూడా జోడించవచ్చు:

మొదట మీరు కర్సర్‌ను ఖాళీ లైన్‌కు తరలించాలి. దీన్ని చేయడానికి, moveToInsertRow() పద్ధతికి కాల్ చేయండి .

అప్పుడు మీరు updateXXX() పద్ధతిని ఉపయోగించి ఈ అడ్డు వరుసను డేటాతో నింపాలి .

ఆపై మీరు అడ్డు వరుసను బేస్‌కి జోడించడానికి ఇన్‌సర్టర్‌రో() పద్ధతికి కాల్ చేయాలి .

చివరగా, మీరు moveToCurrentRow() పద్ధతికి కాల్ చేయడం ద్వారా కర్సర్‌ను తిరిగి ఇవ్వాలి .

ముఖ్యమైనది! పొడిగించిన స్టేట్‌మెంట్ కోసం అన్ని DBMSలు ఈ ఎంపికలకు మద్దతు ఇవ్వవు. సమస్యల విషయంలో, నిర్దిష్ట DBMS యొక్క అధికారిక డాక్యుమెంటేషన్ చూడండి.