JavaRush /Kurslar /All lectures for UZ purposes /ResultSet bilan ilg'or ishlash

ResultSet bilan ilg'or ishlash

All lectures for UZ purposes
Daraja, Dars
Mavjud

ResultSetni sozlash

Bugungi JDBC API Statement va ResultSet obyektlarining ishlashini ancha moslashtirish imkonini beradi. Masalan, ResultSet yordamida ma'lumotlar bazasidagi qatorlarni o'zgartirish mumkin.

Statement obyektini yaratishda ko'plab parametrlardan foydalanish mumkin. Bu parametralarni uch guruhga bo'lish mumkin:

  • Ma'lumotlar bazasi bilan aloqa turi
  • Bir vaqtning o'zida foydalanishni boshqarish
  • Saqlanish va tranzaktsiyalar

Bu parametrlarni Statement yoki PreparedStatement obyekti yaratishda berish mumkin. Misol:


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 narsalarni chuqur o'rganmaymiz, lekin sen shuni bilishing kerakki, agar begonalarning kodlarida shunga o'xshash narsalarni uchratsang, bu imkoniyat bor.

ResultSet turlari

ResultSet ma'lum bir turga ega bo'lishi mumkin. Bu tur ResultSetning ba'zi xususiyatlari va imkoniyatlarini belgilaydi.

Hammasi ma'lumotlar bazalari va JDBC drayverlari har xil turlarni qo'llab-quvvatlamaydi. Sen foydalanmoqchi bo'lgan turni qo'llab-quvvatlayaptimi, ma'lumotlar bazang va JDBC drayveringni tekshirishing kerak bo'ladi. DatabaseMetaData.supportsResultSetType(int type) usuli tanlangan tur qo'llab-quvvatlanadimi yoki yo'qmi, true yoki false qaytaradi.

Maqola yozilish vaqtida uchta ResultSet turi mavjud:

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

Standart tur — TYPE_FORWARD_ONLY.

TYPE_FORWARD_ONLY ResultSetni faqat oldinga surish mumkinligini anglatadi. Ya'ni, sen faqat 1-qator, 2-qator, 3-qator va hokazo kabi oldinga harakatlanishing mumkin. ResultSetda sen orqaga qaytolmaysan: 10-qatorni o'qigandan keyin 9-qatorni o'qiyolmaysan.

TYPE_SCROLL_INSENSITIVE ResultSetni oldinga va orqaga qaytib surish mumkinligini anglatadi. Shuningdek, sen joriy pozitsiyaga nisbatan pozitsiyaga o'tish yoki aniq pozitsiyaga o'tish imkoniga ega bo'lasan.

Ushbu turdagi ResultSet asosiy ma'lumotlar manbasidagi o'zgarishlarga befarqdir, ResultSet ochiq bo'lgan paytda. Ya'ni, agar ResultSetdagi yozuv ma'lumotlar bazasida boshqa oqim yoki jarayon tomonidan o'zgartirilsa, bu allaqachon ochilgan ResultSetdagi yozuvga aks etmaydi.

TYPE_SCROLL_SENSITIVE bu ResultSetni oldinga va orqaga qaytarish mumkinligini anglatadi. Shuningdek, sen joriy pozitsiyaga nisbatan pozitsiyaga o'tish yoki aniq pozitsiyaga o'tish imkoniga ega bo'lasan.

Ushbu turdagi ResultSet asosiy ma'lumotlar manbasidagi o'zgarishlarga sezgirdir, ResultSet ochiq bo'lgan paytda. Ya'ni, agar ResultSetdagi yozuv ma'lumotlar bazasida boshqa oqim yoki jarayon tomonidan o'zgartirilsa, bu allaqachon ochilgan ResultSetda aks etadi.

Concurrency

ResultSetning parallel ishlashi ResultSet yangilanadimi yoki faqat o'qiladimi, shuni belgilaydi.

Ba'zi ma'lumotlar bazalari va JDBC drayverlari ResultSetni yangilashni qo'llab-quvvatlaydi, lekin har biri emas. DatabaseMetaData.supportsResultSetConcurrency(int concurrency) usuli tanlangan parallellik rejimi qo'llab-quvvatlanadimi yoki yo'qmi, true yoki false qaytaradi.

ResultSet ikki parallel oshirish darajasiga ega bo'lishi mumkin:

  • ResultSet.CONCUR_READ_ONLY
  • ResultSet.CONCUR_UPDATABLE

CONCUR_READ_ONLY ResultSet faqat o'qilishi mumkinligini bildiradi.

CONCUR_UPDATABLE ResultSetda ma'lumotlarni o'qish va o'zgartirish mumkinligini bildiradi.

Ma'lumotlarni bazada o'zgartirish misoli

Ushbu parametralar yordamida sen yaratgan Statement va uning ResultSetini boshqarishing mumkin.

Masalan, yangilanadigan ResultSet yaratib, uning yordamida ma'lumotlar bazasini o'zgartirish mumkin. Statementni yaratishda quyidagi shartlarga rioya qilish kerak:

  • faqat bitta jadval ko'rsatiladi
  • qo'shilish yoki guruhlash kiritmalari yo'q
  • so'rov ustunlari birlamchi kalitni o'z ichiga olishi kerak

Yuqorida aytilgan shartlar bajarilganda, yangilanadigan ResultSet ma'lumotlar bazasidagi jadvalni o'zgartirish uchun ishlatilishi mumkin. Statement ob'ektini yaratishda quyidagi parametrlarni ko'rsatish kerak:


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

Bunday operatsiyani bajarish natijasi yangilanadigan natijalar to'plami bo'lib, yangilash metodi ResultSetning kursorini o'zgartirilishi kerak bo'lgan qatorga olib borish va keyin updateXXX() metodini chaqirishdir.

updateXXX metodi getXXX() metodiga o'xshash ishlaydi. updateXXX() metodida ikkita parametr bo'ladi. Birinchisi — yangilanish ustuni raqami, bu ustun nomi yoki ketma-ketlik raqami bo'lishi mumkin. Ikkinchisi — yangilanishi kerak bo'lgan ma'lumotlar va bu ma'lumot turi XXX bilan bir xil bo'lishi kerak.

Qator haqiqatan ham bazada yangilanishi uchun, ResultSet kursori o'zgartirilgan qatorni tark etishdan oldin updateRow() metodini chaqirishingiz kerak, aks holda o'zgarishlar bazaga kiritilmaydi.

Shuningdek, jadvalga yangi qatorlarni qo'shish mumkin:

Dastlab kursorni bo'sh qatorga siljitishingiz kerak. Buning uchun moveToInsertRow() metodini chaqirishingiz kerak.

Keyin updateXXX() metodi yordamida ushbu qatorni ma'lumotlar bilan to'ldirish kerak.

Keyin inserRow() metodini chaqirishingiz kerak, shunda qator bazaga qo'shiladi.

Nihoyat, kursori qaytarish uchun moveToCurrentRow() metodini chaqirishingiz kerak.

Diqqat! Hamma ma'lumotlar bazasi sistemalari kengaytirilgan Statement operatori uchun ushbu parametralarni qo'llab-quvvatlamaydi. Muammolar tug'ilganda, ma'lumotlar bazasining rasmiy hujjatlarini ko'ring.

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