Bu təlimat məlumatı əldə etmək üçün JDBC ResultSet-dən necə istifadə etməyi izah edir. Biz həmçinin nümunələrlə ResultSetMetaData və DatabaseMetaData interfeyslərini öyrənəcəyik:
JDBC DriverManager təlimatında JDBC dərslik seriyası , biz JDBC-dən necə istifadə edəcəyimizi öyrəndik. DriverManager və onun metodları, Java proqramlarında JDBC PreparedStatement.
Bu dərslikdə biz JDBC-də qalan interfeysləri müzakirə edəcəyik. Əvvəlki dərsliklərimizdə Statement, PreparedStatement və CallableStatement interfeyslərini əhatə etmişik.
Burada biz JDBC ResultSet, ResultSetMetaData və DatabaseMetaData interfeysləri, onların metodları və Java proqramında metodlardan necə istifadə ediləcəyini öyrənəcəyik.
JDBC ResultSet İnterfeysi
ResultSet İnterfeysi java.sql paketində mövcuddur. Java Proqramında SQL ifadələrinin icrasından sonra verilənlər bazası cədvəlindən qaytarılan məlumatları saxlamaq üçün istifadə olunur. ResultSet obyekti nəticə məlumatında kursor nöqtəsini saxlayır. Varsayılan olaraq, kursor nəticə məlumatının birinci cərgəsindən əvvəl yerləşdirilir.
Kursoru irəli istiqamətdə növbəti mövqeyə keçirmək üçün növbəti() metodundan istifadə edilir. Daha çox qeyd olmadıqda FALSE qaytaracaq. O, hər hansı bir ifadə obyektindən istifadə edərək executeQuery() metodunu çağıraraq məlumatları əldə edir. Bu, Statement və ya PreparedStatement və ya CallableStatement obyekti ola bilər. PreparedStatement vəsütun cədvəlinin sxem adını qaytarır
ResultSetMetaData Misal
package com.STH.JDBC; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class ResultSetMetaData_Example { public static void main(String[] args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub String QUERY= " select * from employee_details"; Class.forName("oracle.jdbc.driver.OracleDriver"); try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE")) { Statement statemnt1 = conn.createStatement(); ResultSet rs1 =null; rs1 = statemnt1.executeQuery(QUERY); ResultSetMetaData rsmd = rs1.getMetaData(); System.out.println(" We are using ResultSetMetaData "); System.out.println("No: of Columns: "+ rsmd.getColumnCount()); System.out.println("ColumnName of Column 1: "+ rsmd.getColumnName(1)); System.out.println("Data Type of Column 2: " + rsmd.getColumnTypeName(2)); System.out.println("Table Name of the Column 1: " + rsmd.getTableName(1)); System.out.println("Schema Name of the Column 1: " + rsmd.getSchemaName(1)); } } }
ÇIXIŞ:
İzahat:
Yuxarıdakı proqramda, biz ResultSetMetaData interfeysində getColumnCount(),getColumnName(), getColumnTypeName(), getTableName() və getSchemaName() metodlarını tətbiq etdik.
DatabaseMetaData
DatabaseMetaData interfeysi verilənlər bazası haqqında məlumat verir. DatabaseName, Database version, və s.
DatabaseMetaData interfeysinin vacib üsulları:
Metodun adı | Təsvir |
---|---|
String getDriverName() | O, Java proqramımızda istifadə etdiyimiz JDBC sürücüsünün adını qaytaracaq |
String getDriverVersion() | O, JDBC sürücüsünün versiya nömrəsini qaytarır |
String getUserName() | İstifadə etdiyimiz Verilənlər Bazasının istifadəçi adını qaytarır |
String getDatabaseProductName() | O, qaytarır olduğumuz Verilənlər Bazasının adıistifadə |
String getDatabaseProductVersion() | İstifadə etdiyimiz Verilənlər Bazasının versiya nömrəsini qaytarır |
ResultSet getSchemas() | Bağlı verilənlər bazasında mövcud olan sxemlərin adlarını qaytarır |
String getStringFunctions() | Bağlı verilənlər bazasında mövcud olan sətir funksiyalarının siyahısını qaytarır |
String getTimeDateFunctions() | Bu əlaqəli verilənlər bazasında mövcud olan vaxt və tarix funksiyalarının siyahısını qaytarır |
String getURL() | Verilənlər bazası üçün URL-i qaytarır |
Boolean isReadOnly() | Verilənlər bazasının yalnız oxumaq rejimində olub-olmadığını qaytarır |
Boolean BatchUpdates()'i dəstəkləyir | Verilənlər bazasının toplu yeniləmələri dəstəkləyib-dəstəkləmədiyini qaytarır |
Boolean Savepoints() | Verilənlər bazasının Savepoints-i dəstəkləyib-dəstəkləmədiyini qaytarır |
Boolean supportsStatementPooling() | Verilənlər Bazasının Bəyanat Poolinqini dəstəkləyib-dəstəkləmədiyini qaytarır |
Boolean StoredProcedures()'i dəstəkləyir | Verilənlər Bazasının Saxlanan prosedurları dəstəkləyib-dəstəkləmədiyini qaytarır |
Boolean SupportsOuterJoins() | Verilənlər bazasının Xarici Qoşulmanı dəstəkləyib-dəstəkləmədiyini qaytarır |
Burada DatabaseMetaData interfeysinin bəzi mühüm üsullarını sadaladıq. -a müraciət edə bilərsinizDatabaseMetaData interfeysində mövcud olan bütün üsulları görə biləcəyiniz Oracle rəsmi saytı.
Verilənlər BazasıMetaData Misal:
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class DatabaseMetaData_Example { public static void main(String[] args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE"); DatabaseMetaData dbmd = conn.getMetaData(); System.out.println("Using DatabaseMetaData"); System.out.println("Driver Name: " + dbmd.getDriverName()); System.out.println("Driver Version: "+ dbmd.getDriverVersion()); System.out.println("UserName of the Database: " + dbmd.getUserName()); System.out.println("Database Product Name:" + dbmd.getDatabaseProductName()); System.out.println("Database Product Version: " + dbmd.getDatabaseProductVersion()); System.out.println("List of String Functions in the Database: " + dbmd.getStringFunctions()); System.out.println("List of Time & Date functions in the Database: " + dbmd.getTimeDateFunctions()); System.out.println("URL of the Database: " + dbmd.getURL()); System.out.println("Database is read - only? " +dbmd.isReadOnly()); System.out.println("Support Batch Updates? " + dbmd.supportsBatchUpdates()); System.out.println("Support savepoints? " + dbmd.supportsSavepoints()); System.out.println("Support Statement Pooling? "+ dbmd.supportsStatementPooling()); System.out.println("Support Stored Procedures? " + dbmd.supportsStoredProcedures()); System.out.println("Support Outer Join? "+ dbmd.supportsOuterJoins()); } }
ÇIXIŞ:
İzahat:
Yuxarıdakı proqramda biz getDriverName(), getDriverVersion() funksiyalarından istifadə etmişik/ həyata keçirmişik. , getUserName(), getDatabaseProductName(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), supportsBatchUpdates(), supportsStatementPooling(), supportsSavepoints(), supportsStored(J)Pro in supports DatabaseMetaData Interface.
Qeyd ediləcək məqamlar:
- JDBC ResultSet interfeysi verilənlər bazasındakı məlumatları saxlamaq və Java Proqramımızda istifadə etmək üçün istifadə olunur.
- Biz həmçinin updateXXX() metodlarından istifadə edərək məlumatları yeniləmək üçün ResultSet-dən istifadə edə bilərik.
- ResultSet obyekti kursoru nəticə məlumatının birinci cərgəsindən əvvəl göstərir. Next() metodundan istifadə edərək biz ResultSet vasitəsilə təkrarlaya bilərik.
- ResultSet obyektində daha da irəli getmək üçün ResultSet-in naviqasiya metodlarımız var
- ResultMetaData kimi ResultSet haqqında ətraflı məlumat almaq üçün istifadə olunur. sütun adı, sütunların sayı, sütunun məlumat növü və s.
- DatabaseMetData qoşulduğumuz verilənlər bazası haqqında məlumat almaq üçün istifadə olunur
Tez-tez verilən suallar
S #1) Nə istifadə olunurResultSet?
Cavab: ResultSet verilənlər bazasından verilənləri saxlamaq və əldə etmək üçün istifadə olunur. executeQuery() metodu icra edildikdə, ResultSet obyektini qaytaracaq. Məntiqi yerinə yetirmək üçün proqramımızda həmin ResultSet obyektindən istifadə edə bilərik.
Q #2) ResultSet-in boş olub-olmadığını necə yoxlamaq olar?
Cavab: IsResultSet Empty-i yoxlamaq üçün length(), size() kimi əvvəlcədən təyin edilmiş metodlar mövcud deyil. Biz təkrarlamaq üçün next() metodundan istifadə edə bilərik və əgər o, True qaytarırsa, o, boş deyil, əgər False qaytarırsa, Nəticə Kütləsinin boş olması deməkdir.
Q #3) Mümkündürmü ki, ResultSet null ola bilər?
Cavab: Xeyr, executeQuery() metodu heç vaxt null olmaya bilməyən ResultSet obyektini qaytarır.
S #4) Yenilənən ResultSet nədir?
Cavab: Yenilənə bilən ResultSet obyekti sütundakı məlumatları yeniləmək, məlumatları sütunlara daxil etmək və sətirləri silmək üçün istifadə olunur. ResultSet-i yenilənən kimi etmək üçün sürüşdürmə növünü həssas və ya həssas, CONCUR növünü isə yenilənən kimi etməliyik.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
S #5) Qoşulmuş verilənlər bazası adını necə əldə etmək olar?
Cavab: Biz DatabaseMetaData obyektinin getDatabaseProductName() metodundan istifadə edə bilərik.
Nəticə
Bu dərslikdə biz nələrin olduğunu müzakirə etdik. ResultSet, ResultSetMetaData və DatabaseMetaData interfeysləri və onların JDBC proqramlarında ümumi istifadə edilən mühüm metodları. Biz də görmüşükResultSet istifadə edərək DB-də məlumatları necə yeniləmək olar. ResultSetMetadata Sütun Adı, Sütun sayı və s. kimi ResultSet haqqında məlumatları ehtiva edir.
DatabaseMetaData Database məlumatını ehtiva edir.
İfadə interfeysi
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
PreparedStatement interfeysi
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Biz edə bilərik Nəticələri təkrarlayarkən sütunların məlumatlarını əldə etmək üçün getX() metodundan istifadə edin, burada X sütunun məlumat növüdür. GetX() metodlarından istifadə edərək dəyərləri əldə etmək üçün ya Sütun Adları, ya da İndeksdən istifadə edə bilərik.
while(rs1.next()) { int empNum = rs1.getInt("empNum"); String lastName = rs1.getString("lastName"); String firstName = rs1.getString("firstName"); String email = rs1.getString("email"); String deptNum = rs1.getString("deptNum"); String salary = rs1.getString("salary"); System.out.println(empNum + "," +lastName+ "," +firstName+ "," +email +","+deptNum +"," +salary); }
Həmçinin getX() metodlarında Sütun Adı əvəzinə Sütunun indeks nömrəsini qeyd edə bilərik.
while(rs1.next()) { int empNum = rs1.getInt(1); String lastName = rs1.getString(2); String firstName = rs1.getString(3); String email = rs1.getString(4); String deptNum = rs1.getString(5); String salary = rs1.getString(6); System.out.println(empNum + "," +lastName+ "," +firstName+ "," +email +","+deptNum +"," +salary); }
ResultSet Tipləri
Defolt olaraq biz ResultSet-də yerinə yetirilən SQL ifadəsinin çıxışı kimi irəli istiqamətdə qaytarılmış məlumatları/dəyərləri təkrarlaya bilərik. Scrollable ResultSet-dən istifadə edərək dəyərləri başqa istiqamətlərdə təkrarlaya bilərik. Statement, PreparedStatement və CallableStatement obyektlərini yaratarkən ResultSet-in növünü və paralelliyini təyin edə bilərik.
ReultSet-də 3 növ var. Onlar:
- YALNIZ_YALNIZ_İLERİ: Kursorun başlanğıcdan sona, yəni irəli istiqamətdə hərəkət etdiyi defolt seçimdir.
- TYPE_SCROLL_INSENSITIVE: Bu tipdə o, kursoru həm irəli, həm də geriyə doğru hərəkət etdirəcək. Saxlanılan məlumatları təkrarlayarkən verilənlərdə hər hansı dəyişiklik etsək, hər kəs DB-dəki məlumatları dəyişdirərsə, verilənlər bazasında yenilənməyəcək. Çünki verilənlər dəstində SQL sorğusunun qaytardığı vaxtdan verilənlər varData.
- TYPE_SCROLL_SENSITIVE: O, TYPE_SCROLL_INSENSITIVE-a bənzəyir, fərq ondadır ki, hər kəs SQL Sorğu məlumatı qaytardıqdan sonra məlumatları yeniləyirsə, iterasiya zamanı verilənlər bazasına edilən dəyişiklikləri əks etdirəcək.
ResultSet Concurrency
ResultSet-də 2 paralellik rejimi var. Onlar:
- ResultSet.CONCUR_READ_ONLY: Bu standart paralellik rejimidir. Biz yalnız ResultSet-dəki məlumatları oxuya bilərik. Yeniləmə tətbiq edilmir.
- ResultSet.CONCUR_UPDATABLE: Biz ResultSet obyektindəki məlumatları yeniləyə bilərik.
Bəzi verilənlər bazaları hamı üçün paralellik rejimini dəstəkləmir. ResultSet növləri. Bu halda, supportsResultSetConcurrency() metodundan istifadə edərək, onların istədiyimiz növü və paralellik rejimini dəstəklədiyini yoxlamalıyıq.
ResultSet İnterfeysindəki Metodlar
ResultSet metodlarının 4 kateqoriyası var. Onlar:
- Naviqasiya Metodları
- Getter Metodları
- Setter Metodları
- Müxtəlif Metodlar
Əvvəlcə Naviqasiya Metodlarını müzakirə edəcəyik və daha sonra irəliləyəcəyik.
#1) Naviqasiya Metodları
Bu üsul kursoru verilənlər bazası ətrafında hərəkət etdirmək üçün istifadə olunur.
- Boolean absolyut(int sətir): Kursoru parametrdə qeyd olunan müəyyən edilmiş cərgəyə daşımaq və əməliyyat uğurlu olarsa doğru qaytarmaq üçün istifadə olunur, əks halda false qaytarır.
- BoşluqafterLast(): Bu, ResultSet kursorunu sonuncu cərgədən sonra hərəkət etməyə məcbur edir.
- Void beforeFirst(): O, ResultSet kursorunu birinci cərgədən əvvəl hərəkət etdirməyə məcbur edir.
- Boolean first(): O, ResultSet kursorunu birinci sıraya köçürməyə məcbur edir. Əməliyyat uğurlu olarsa, True qaytarır, əks halda False.
- Boolean last(): Bu, ResultSet kursorunu axırıncı sıraya keçirməyə məcbur edir. Əməliyyat uğurlu olarsa, True qaytarır, əks halda False.
- Boolean next(): Bu, ResultSet kursorunu növbəti sıraya keçməyə məcbur edir. Daha çox qeyd varsa True, daha çox qeyd yoxdursa False qaytarır.
- Boolean previous(): O, ResultSet kursorunu əvvəlki sıraya keçirməyə məcbur edir. Əməliyyat uğurlu olarsa True qaytarır, əks halda False.
- Boolean nisbi(): Kursoru irəli və ya geri istiqamətdə verilmiş sıraların sayına aparır.
- Int getRow(): O, ResultSet obyektinin indi göstərdiyi cari sıra nömrəsini qaytarır.
- Void moveToCurrentRow(): Kursoru geri qaytarır. cari cərgə, əgər o, hal-hazırda daxil sətirdədirsə.
- Void moveToInsertRow(): O, sətri verilənlər bazasına daxil etmək üçün kursoru xüsusi cərgəyə aparır. O, cari kursor yerini xatırlayır. Beləliklə, biz kursoru daxil etdikdən sonra cari sıraya köçürmək üçün moveToCurrentRow() metodundan istifadə edə bilərik.
Bu dərslikdə,bütün proqramlar Java dilində yazılmışdır. Biz Java 8 versiyasından və Oracle DB-dən istifadə etmişik.
>>Oracle proqramını buradan endirə bilərsiniz
>>Java 8 versiyasını buradan endirə bilərsiniz
O, Java-nın addım-addım quraşdırma prosesinə malikdir.
JDBC ResultSet Nümunə proqram:(Naviqasiya metodlarından istifadə etməklə)
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class ResultSet_Example { public static void main(String[] args) throws ClassNotFoundException { // TODO Auto-generated method stub //Select query String select_query = "select * from employee_details"; Class.forName("oracle.jdbc.driver.OracleDriver"); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:X E")) { //Creating DatabaseMetaData object DatabaseMetaData dbmd = conn.getMetaData(); //Checking whether the driver supports scroll sensitive type and concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Creating prepared Statement PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet. CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(); //Moving the cursor to point first row rs.first(); System.out.println("FIRST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println("LAST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point before first row rs.beforeFirst(); System.out.println("Cursor is pointing at before the first row. Use next() to move in forward direction"); //Moving the cursor to point first row using next() rs.next(); System.out.println("FIRST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point after last row rs.afterLast(); System.out.println("Cursor is pointing at after the last row. Use previous() to move in backward direction"); //Moving the cursor to point last row using previous() rs.previous(); System.out.println("LAST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point third row rs.absolute(3); System.out.println("Cursor is pointing at 3rd row"); System.out.println("THIRD ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point previous row of third row rs.relative(-1); System.out.println("Cursor is pointing to the 1 row previous to the 3rd row"); System.out.println("Second ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point 4th row after the 2nd row rs.relative(4); System.out.println("Cursor is pointing to the 4th row after the 2nd row"); System.out.println("SIXTH ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point current row System.out.println(" Current Row = " + rs.getRow()); } } catch (SQLException e) { e.printStackTrace(); } } }
ÇIXIŞ:
İşçilərin təfərrüatları cədvəlindəki məlumatlar
İzahat:
Yuxarıdakı proqramda biz birinci(), sonuncu(), beforeFirst(), afterLast(), sonrakı() funksiyalarını yerinə yetirdik. ResultSet-də əvvəlki(), mütləq(), nisbi() və getRow() metodları. Bu üsullardan istifadə etmək üçün biz PreparStatement metodunda ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE dəyərlərini təyin etdik.
Sonra biz ResultSet-də Getter Metodlarının nə olduğunu müzakirə edəcəyik:
#2) Getter Methods
ResultSet verilənlər bazasından cədvəlin məlumatlarını saxlamışdır. Getter metodları ResultSet-də cədvəlin qiymətlərini almaq üçün istifadə olunur. Bunun üçün ya sütun İndeksi dəyərini, ya da Sütun Adını ötürməliyik.
Aşağıdakılar ResultSet-də alıcı üsullardır:
- int getInt (int ColumnIndex): Göstərilən sütunun dəyərini int verilənlər növü kimi almaq üçün istifadə olunur.
- float getFloat(int ColumnIndex): Almaq üçün istifadə olunur. float məlumat növü kimi göstərilən İndeks sütununun dəyəri.
- java.sql.dategetDate(int ColumnIndex): Göstərilən sütun indeksinin dəyərini tarix dəyəri kimi almaq üçün istifadə olunur.
- int getInt(String ColumnName): Almaq üçün istifadə olunur. int verilənlər növü kimi göstərilən sütunun dəyəri.
- float getFloat(String ColumnName): O, müəyyən edilmiş sütunun qiymətini float məlumat növü kimi almaq üçün istifadə olunur.
- Java.sql.date getDate(String ColumnName): Göstərilən sütunun dəyərini tarix dəyəri kimi almaq üçün istifadə olunur.
Getter üsulları var bütün primitiv məlumat növləri üçün (Boolean, uzun, cüt) və String də ResultSet interfeysində. Biz verilənlər bazasından həm də massiv və ikili tip məlumat əldə edə bilərik. Bunun üçün də üsulları var.
#3) Ayarlayıcı/Yeniləyici Metodlar
ResultSet Updater metodlarından istifadə edərək verilənlər bazasında dəyəri yeniləyə bilərik. Bu, Getter metodlarına bənzəyir, lakin burada verilənlər bazasında yeniləmək üçün xüsusi sütun üçün dəyərləri/məlumatları ötürməliyik.
Aşağıdakılar ResultSet-də yeniləyici üsullardır:
- void updateInt(int ColumnIndex, int Value): Göstərilən İndeks sütununun dəyərini int dəyəri ilə yeniləmək üçün istifadə olunur.
- void updateFloat(int ColumnIndex, float f): Göstərilən sütun indeksinin dəyərini float dəyəri ilə yeniləmək üçün istifadə olunur.
- void updateDate(int ColumnIndex, Date d): Göstərilən sütun indeksinin dəyərini yeniləmək üçün istifadə olunurtarix dəyəri ilə.
- void updateInt(String ColumnName, int Value): Göstərilən sütunun dəyərini verilmiş int dəyəri ilə yeniləmək üçün istifadə olunur.
- void updateFloat(String ColumnName, float f): O, müəyyən edilmiş sütunun dəyərini verilmiş float dəyəri ilə yeniləmək üçün istifadə olunur.
- Java.sql.date getDate(String ColumnName): O, müəyyən edilmiş sütunun dəyərini verilmiş tarix dəyəri ilə yeniləmək üçün istifadə olunur.
Bütün ibtidai məlumat növləri (Boolean, long, double) və String üçün Updater metodları mövcuddur. həmçinin ResultSet interfeysində.
Yeniləmə üsulları yalnız ResultSet obyektindəki məlumatları yeniləyir. Dəyərlər insertRow və ya updateRow metodu çağırıldıqdan sonra DB-də yenilənəcək.
Sətrin yenilənməsi:
Biz updateX() metodlarına zəng etməklə cərgədəki məlumatları yeniləyə bilərik. , sütun adını və ya indeksi və yeniləmək üçün dəyərləri ötürmək. updateX metodunda X yerinə istənilən məlumat növündən istifadə edə bilərik. İndiyədək biz ResultSet obyektindəki məlumatları yeniləmişik. DB-dəki məlumatları yeniləmək üçün updateRow() metodunu çağırmalıyıq.
Sətrin daxil edilməsi:
Kursoru hərəkət etdirmək üçün moveToInsertRow() istifadə etməliyik. yeni sətir daxil etmək üçün. Biz bunu Naviqasiya üsulları bölməsində artıq əhatə etmişik. Sonra, məlumatları sıraya əlavə etmək üçün updateX() metodunu çağırmalıyıq. Biz bütün sütunlar üçün məlumat verməliyik, əks halda o, həmin xüsusi sütunun standart dəyərindən istifadə edəcəksütun.
Məlumatları yenilədikdən sonra insertRow() metodunu çağırmalıyıq. Sonra yeni sətir daxil etməyə başlamazdan əvvəl kursorun mövqeyini geri götürmək üçün moveToCurrentRow() metodundan istifadə edin.
ResultSet Misal:
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ResultSet_Example1 { public static void main(String[] args) throws ClassNotFoundException { // TODO Auto-generated method stub String select_query = "select empnum,lastName,firstName from employee_details"; String insert_query = "insert into employee_details values(?,?,?,?,?,?)"; Class.forName("oracle.jdbc.driver.OracleDriver"); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE")) { //Creating DatabaseMetaData object DatabaseMetaData dbmd = conn.getMetaData(); //Checking whether the driver supports scroll insensitive type and concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Creating prepared Statement PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(select_query); //Moving the cursor to point last row of the table rs.last(); System.out.println("LAST ROW: Before inserting new Employee"); System.out.println("LAST ROW: EMPNUM = " + rs.getInt(1)); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); // Setting the values to insert in the EMPLOYEE_DETAILS Table //Moving the cursor to point insert a row to table rs.moveToInsertRow(); //Update EMPNUM value rs.updateInt(1, 1017); //Update LAST NAME value rs.updateString(2, "Bond"); //Update FIRST NAME value rs.updateString(3, "James"); //Insert a new row rs.insertRow(); //Moving the cursor to point 5th row rs.absolute(5); System.out.println("Befor Updating EMPNUM of the 5th ROW"); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); System.out.println(" Updating EMP id of the 5th EMPLOYEE"); //Updating EMPNUM of 5th row rs.updateInt(1,3005); rs.updateRow(); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println("LAST ROW: EMPNUM = " + rs.getInt(1)); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); } } catch (SQLException e) { e.printStackTrace(); } } }
ÇIXIŞ:
İzahat:
Yuxarıdakı proqramda gördüyümüz ilk şeydir, biz saxladıq SELECT sorğusundan istifadə edərək ResultSet obyektindəki Employee_details cədvəlinin məlumatları. Sonra, ResultSet-in last() metodundan istifadə edərək, işçi_details cədvəlində sonuncu sıranın məlumatlarını göstərdik. moveToInsertRow() metodu kursoru cari cərgə yönəldir, indi cari sətir sonuncu sətirdir.
updateXXX()metodları sətirə dəyərləri yeniləmək üçün istifadə olunur və insertRow() metodu məlumatları daxil edib yeni sıra. Absolyut() metodundan istifadə edərək kursoru 5-ci sıraya yönəltdik. UpdateInt() metodu EMPNUM-u cədvəldəki 5-ci işçinin yeni identifikatoru ilə yeniləmək üçün istifadə edilmişdir. Bundan sonra, EMPNUM-un yenilənib-yenilənmədiyini yoxlamaq üçün məlumatlar göstərilir.
Last() istifadə edərək kursoru cədvəlin sonuncu sətirinə yönəldin və onu göstərin. Yuxarıdakı məntiqi yerinə yetirmək üçün biz PreparStatement metodunda ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE qiymətlərini təyin etməliyik.
#4) Müxtəlif üsullar
- void close(): O, ResultSet instansiyasını bağlamaq və boşaldmaq üçün istifadə olunurResultSet nümunəsi ilə əlaqəli resurslar.
- ResultSetMetaData getMetaData(): O, ResultSetMetaData Nümunəsini qaytarır. Sorğu çıxışının sütunlarının növü və xüsusiyyəti haqqında məlumat var. Növbəti bölmədə ResultSetMetaData haqqında ətraflı öyrənəcəyik.
ResultSetMetaData
Metaməlumat nədir?
Metaməlumat məlumatlar haqqında məlumat deməkdir. Bu interfeysdən istifadə edərək ResultSet haqqında daha çox məlumat əldə edəcəyik. O, java.sql paketində mövcuddur. Hər bir ResultSet obyekti bir ResultSetMetaData obyekti ilə əlaqələndirilir.
Bu obyektdə sütunun məlumat növü, sütun adı, sütunların sayı, cədvəl adı, sxem adı və s. kimi sütunların xüsusiyyətlərinin təfərrüatları olacaq. ResultSet-in getMetaData() metodundan istifadə edərək ResultSetMetaData obyektini əldə edə bilərik.
ResultSetMetaData-nın sintaksisi:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
ResultSetMetaData interfeysinin vacib üsulları:
Metodun adı | Təsvir |
---|---|
String getColumnName(int sütun) | Xüsusi sütunun sütun adını qaytarır |
String getColumnTypeName(int column) | O, verilənlərin tipini qaytarır. parametr kimi keçdiyimiz xüsusi sütun |
String getTableName(int column) | Bu sütunun cədvəl adını qaytarır |
String getSchemaName(int sütun) | Bu |