JavaRush /Kurslar /All lectures for TK purposes /ResultSet bilen Öňdebaryjy iş

ResultSet bilen Öňdebaryjy iş

All lectures for TK purposes
Dereje , Sapak
Elýeterli

ResultSet-i kastomizasiýa

Häzirki JDBC API Statement we ResultSet obýektlerini uly derejede kastomizasiýa etmäge mümkinçilik berýär. Mysal üçin, ResultSet bilen maglumatlar bazany üýtgedip bolýar.

Statement obýektini döredende oňa bir topar isleglerimizi geçirip bileris. Bu islegleri üç topara bölüp bileris:

  • Baza bilen baglanyşyk görnüşi
  • Birinji girýanyň dolandyrylyşy
  • Saklanylma we tranzaksiýalar

Bu parametrleri Statement ýa-da PreparedStatement obýektiň döredilende berip bolýar. Mysal:


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);

Bu zatlary çuňňur öwrenmeris, emma başga biriniň kodunda şeýle bir zat bolsa, munuň mümkinçiliginiň bardygyny bilmegiňi isleýärin.

ResultSet-iň görnüşleri

ResultSet belli bir görnüşde bolup biler. Görnüşi ResultSet-iň käbir häsiýetlerini we mümkinçiliklerini belleýär.

Ähli görnüşleri ähli maglumat bazalary we JDBC draýwerleri tarapyndan goldanmaýar. Öz maglumat bazany we JDBC draýweriňi barlap, ulanjak bolýan görnüşiňi goldaýamy ýa-da ýokdygyny görmek üçin barlamaly. DatabaseMetaData.supportsResultSetType(int type) metody şol görnüşi goldaýamy ýa-da ýokdugyny görkezýär.

Makalanyň ýazylýan wagtynda üç sany ResultSet görnüşi bar:

  • ResultSet.TYPE_FORWARD_ONLY
  • ResultSet.TYPE_SCROLL_INSENSITIVE
  • ResultSet.TYPE_SCROLL_SENSITIVE

Adaty görnüş — TYPE_FORWARD_ONLY.

TYPE_FORWARD_ONLY ResultSet-i diňe öňe hereket edip bolýandygyny aňladýar. Diýmek, diňe birinji setirden ikinji, üçünji setire hereket edip bilersiň we ş.m. ResultSet-de yzyna hereket edip bilmersiň: onunjy setirden soň dokuzynjy setiri okamaga bolmaz.

TYPE_SCROLL_INSENSITIVE ResultSet-i hem öňe, hem-de yzyna hereket etdirip (skrollap) bolýandygyny aňladýar. Şeýle hem häzirki pozisiýa degişli pozisiýa geçip ýa-da aňryçäk pozisiýa geçip bilersiň.

Bu görnüşli ResultSet açyk bolýan wagtynda esasy maglumat çeşmesindäki üýtgeşmeleri duýmaýar. Başga bir tok ýaýjy ýa-da proses tarapyndan Maglumat bazasynda ResultSet-de ýazgy üýtgedilse-de, bu ýagdaý açylan ResultSet üçin maglumat bazasynda görkezilmez.

TYPE_SCROLL_SENSITIVE ResultSet-i hem öňe, hem-de yzyna hereket etdirip (skrollap) bolýandygyny aňladýar. Şeýle hem häzirki pozisiýa degişli pozisiýa geçip ýa-da aňryçäk pozisiýa geçip bilersiň.

Bu görnüşli ResultSet açyk bolýan wagtynda esasy maglumat çeşmesindäki üýtgeşmeleri duýýar. Başga bir tok ýaýjy ýa-da proses tarapyndan Maglumat bazasynda ResultSet-de ýazgy üýtgedilse, bu ýagdaý açylan ResultSet üçin maglumat bazasynda görkeziler.

Concurrency

ResultSet-iň pygşagyny, ResultSet-iň täzelenäýarmy ýa-da diňe okalýarmy, kesgitleýär.

Käbir maglumat bazalary we JDBC draýwerleri ResultSet täzelenmäni goldaýar, emma hemmesi däl. DatabaseMetaData.supportsResultSetConcurrency(int concurrency) metody şol pygşagy goldaýamy ýa-da ýokdugyny görkezýär.

ResultSet iki pygşagyň birine eýe bolup biler:

  • ResultSet.CONCUR_READ_ONLY
  • ResultSet.CONCUR_UPDATABLE

CONCUR_READ_ONLY ResultSet-i diňe okalýan diýip görkezýär.

CONCUR_UPDATABLE ResultSet-iň okalyp we üýtgedilip bilnerdigini aňladýar.

Maglumatlary bazada üýtgetmegiň mysaly

Bu parametrler bilen döredilen Statement we onuň ResultSet-i dolandyryp bilersiň.

Mysal üçin, täzelenip bilýän ResultSet döredip, onuň bilen maglumat bazanyň üsti bilen üýtgetmegimiz mümkin. Statement döredilende aşakdaky şertler göz öňünde tutulmaly:

  • diňe bir tablisany görkezmeli
  • birikdirme ýa-da toparlaşdyrylan teklipleri öz içine almaýar
  • soragnama sütünleri esasy açary öz içine almalydyr

Ýokardaky şertler ýerine ýetirilende, täzelenip bilýän ResultSet maglumat bazyndaky tablisa üýtgetmek üçin ulanylyp bilner. Statement obýekti döredilende şeýle parametrler görkezilmeli:


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

Bu operator ýerine ýetirileninde, täzelenip bilýän netijeler toplumy alnar. Täzelenmeli metod, ResultSet kursoryny üýtgedejegiň setirine geçirileninden hem-de updateXXX() metodynyň çagyrylmalyndan durýar.

updateXXX metody getXXX() metody bilen meňzeş işleýär. updateXXX() metody iki parametrden durýar. Birinjisi, üýtgedilmeli sütün diýen belgi bolup, sutiniň ady ýa-da seriýaly belgi bolup bilýär. Ikinjisi bolsa, täzelenmeli maglumatlar bolup, şol maglumatlaryň görnüşi hem XXX bilen birmeňzeş bolmalydyr.

Setir maglumat bazasynda hakykatdan täzelenmegi üçin, ResultSet kursory üýtgedilen setirden çykmazdan öň updateRow() metody çagyrmaly, ters ýagdaýda üýtgeşmeler maglumat bazasyna geçmez.

Tablisanyň täze setirlerini hem goşup bolýar:

Ilki kursory boş setire geçirmek gerek. Munuň üçin moveToInsertRow() metody çagyrmaly.

Soňra bu setir maglumatlar bilen doldurulmaly, updateXXX() metody bilen.

Soňra inserRow() metody çagyrmak gerek, setiri maglumat bazasyna goşmak üçin.

Ahyrsoňy kursory yzyna geçirmeli, moveToCurrentRow() metodyny çagyrmak bilen.

Wagtynda! Ähli maglumat bazalary bu parametrleri ösen Statement üçin goldamaýar. Meseläniň ýüze çykýan ýagdaýynda anyk maglumat bazalaryň resmi dokumentasiýasyna seret.

Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION