jdbc resultset how use java resultset retrieve data
Bu eğitici, verileri almak için JDBC ResultSet'in nasıl kullanılacağını açıklar. ResultSetMetaData ve DatabaseMetaData arayüzlerini de örneklerle öğreneceğiz:
İçinde JDBC DriverManager öğreticisi JDBC eğitim serisi Java uygulamalarında JDBC DriverManager ve yöntemlerini, JDBC PreparedStatement'ı nasıl kullanacağımızı öğrendik.
Bu eğiticide, JDBC'de kalan arayüzleri tartışacağız. Önceki eğitimlerimizde Statement, PreparedStatement ve CallableStatement arayüzlerini ele aldık.
Burada JDBC ResultSet, ResultSetMetaData ve DatabaseMetaData arayüzlerini, yöntemlerini ve Java programındaki yöntemlerin nasıl kullanılacağını öğreneceğiz.
Ne öğreneceksin:
JDBC ResultSet Arayüzü
ResultSet Arayüzü java.sql paketinde mevcuttur. Java Programında SQL ifadelerinin yürütülmesinden sonra veritabanı tablosundan döndürülen verileri depolamak için kullanılır. ResultSet nesnesi, sonuç verilerinde imleç noktasını korur. Varsayılan olarak, imleç, sonuç verilerinin ilk satırından önce konumlanır.
Next () yöntemi, imleci ileri yönde bir sonraki konuma hareket ettirmek için kullanılır. Başka kayıt yoksa YANLIŞ döndürür. İfade nesnelerinden herhangi birini kullanarak executeQuery () yöntemini çağırarak verileri alır. Statement veya PreparedStatement veya CallableStatement nesnesi olabilir. PreparedStatement ve CallableStatement arayüzleri, Statement arayüzünün alt arayüzleridir.
İfade Arayüzü
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
PreparedStatement Arayüzü
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Sütunların verilerini almak için getX () yöntemini kullanabiliriz ve sonuçlarda iterasyon yaparken X - sütunun veri türüdür. GetX () yöntemlerini kullanarak değerleri elde etmek için Sütun Adlarını veya Dizin'i kullanabiliriz.
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); }
GetX () yöntemlerinde Sütun Adı yerine Sütunun dizin numarasından da bahsedebiliriz.
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); }
Sonuç Kümesi Türleri
Varsayılan olarak, yürütülen SQL ifadesinin bir çıktısı olarak döndürülen ResultSet içindeki verileri / değerleri ileri yönde yineleyebiliriz. Scrollable ResultSet kullanarak değerleri diğer yönlerde yineleyebiliriz. Statement, PreparedStatement ve CallableStatement nesnelerini oluştururken ResultSet'in türünü ve eşzamanlılığını belirleyebiliriz.
ResultSet'te 3 tip vardır. Onlar:
- TYPE_FORWARD_ONLY: İmlecin baştan sona, yani ileri yönde hareket ettiği varsayılan seçenektir.
- TYPE_SCROLL_INSENSITIVE: Bu tipte, imlecin hem ileri hem de geri yönde hareket etmesini sağlayacaktır. Depolanan verileri yinelerken verilerde herhangi bir değişiklik yaparsak, herhangi biri DB'deki verileri değiştirirse veri kümesinde güncellenmez. Veri kümesi, SQL sorgusunun Verileri döndürdüğü andan itibaren verilere sahip olduğundan.
- TYPE_SCROLL_SENSITIVE: TYPE_SCROLL_INSENSITIVE ile benzerdir, fark, SQL Sorgusu verileri döndürdükten sonra herhangi birinin verileri güncellemesi, yinelemenin veri kümesindeki değişiklikleri yansıtmasıdır.
Sonuç Kümesi Eşzamanlılığı
ResultSet'te 2 Eşzamanlılık modu vardır. Onlar:
- ResultSet.CONCUR_READ_ONLY: Varsayılan eşzamanlılık modudur. Yalnızca ResultSet'teki verileri okuyabiliriz. Güncelleme geçerli değildir.
- ResultSet.CONCUR_UPDATABLE: ResultSet nesnesindeki verileri güncelleyebiliriz.
Bazı veritabanları, tüm ResultSet türleri için eşzamanlılık modunu desteklemez. Bu durumda, supportsResultSetConcurrency () yöntemini kullanarak istediğimiz tür ve eşzamanlılık modunu destekleyip desteklemediklerini kontrol etmemiz gerekir.
ResultSet Arayüzündeki Yöntemler
ResultSet yöntemlerinin 4 kategorisi vardır. Onlar:
- Gezinme Yöntemleri
- Alıcı Yöntemleri
- Setter Yöntemleri
- Çeşitli Yöntemler
Öncelikle Navigasyon Yöntemlerini tartışacağız ve daha sonra ilerleyeceğiz.
# 1) Gezinme Yöntemleri
Bu yöntem, imleci veri kümesi etrafında hareket ettirmek için kullanılır.
- Mutlak Boole (int satır): İmleci parametrede belirtilen belirtilen satıra hareket ettirmek ve işlem başarılı olursa true döndürmek için kullanılır, aksi takdirde false döndürür.
- Son () sonrası geçersiz: ResultSet imlecinin son satırdan sonra hareket etmesini sağlar.
- İlk önce geçersiz (): ResultSet imlecinin ilk satırdan önce hareket etmesini sağlar.
- Önce Boole (): ResultSet imlecinin ilk satıra gitmesini sağlar. İşlem başarılı olursa True döndürür, False.
- Son Boole (): ResultSet imlecinin son satıra gitmesini sağlar. İşlem başarılı olursa True döndürür, False.
- Sonraki Boole (): ResultSet imlecinin sonraki satıra gitmesini sağlar. Daha fazla kayıt varsa True, başka kayıt yoksa False döndürür.
- Önceki Boole (): ResultSet imlecinin önceki satıra gitmesini sağlar. İşlem başarılı olursa True döndürür, False.
- Boole göreli (): İmleci verilen satır sayısına ileri veya geri yönde hareket ettirir.
- Int getRow (): ResultSet nesnesinin işaret ettiği geçerli satır numarasını döndürür.
- Void moveToCurrentRow (): İmleci, şu anda ekleme satırındaysa, geçerli satıra geri taşır.
- Void moveToInsertRow (): Satırı Veritabanına eklemek için imleci belirli satıra taşır. Mevcut imleç konumunu hatırlar. Böylece, imleci eklemeden sonra geçerli satıra taşımak için moveToCurrentRow () yöntemini kullanabiliriz.
Bu eğiticide, tüm programlar Java ile yazılmıştır. Java 8 sürümünü ve Oracle DB'yi kullandık.
>> Oracle yazılımını şu adresten indirebilirsiniz: İşte
>> Java sürüm 8'i şu adresten indirebilirsiniz: İşte
Adım adım Java kurulum sürecine sahiptir.
JDBC ResultSet Örnek Programı: (Gezinme yöntemlerini kullanarak)
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
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println('LAST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
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
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
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
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
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
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
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
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
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
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point current row System.out.println(' Current Row = ' + rs.getRow()); } } catch (SQLException e) { e.printStackTrace(); } } }
ÇIKTI:
Employee_details tablosundaki veriler
Açıklama:
Yukarıdaki programda, ResultSet'te first (), last (), beforeFirst (), afterLast (), next (), previous (), absolute (), relative () ve getRow () yöntemlerini uyguladık. Bu yöntemleri kullanmak için, preparStatement yönteminde ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE değerlerini belirleriz.
Ardından, ResultSet'teki Getter Yöntemlerinin neler olduğunu tartışacağız:
# 2) Getter Yöntemleri
ResultSet, tablonun verilerini Veritabanından depoladı. Getter yöntemleri ResultSet'teki tablonun değerlerini almak için kullanılır. Bunun için sütun Dizin değerini veya Sütun Adını geçmemiz gerekir.
Aşağıdakiler, ResultSet'teki alıcı yöntemleridir:
- int getInt (int ColumnIndex): Bir int veri türü olarak belirtilen sütun Index'in değerini almak için kullanılır.
- float getFloat (int ColumnIndex): Bir float veri türü olarak belirtilen sütun Index'in değerini almak için kullanılır.
- java.sql.date getDate (int ColumnIndex): Belirtilen sütun indeksinin değerini tarih değeri olarak almak için kullanılır.
- int getInt (Dize SütunAdı): Belirtilen sütunun değerini int veri türü olarak almak için kullanılır.
- float getFloat (Dize SütunAdı): Belirtilen sütunun değerini float veri türü olarak almak için kullanılır.
- Java.sql.date getDate (Dize SütunAdı): Belirtilen sütunun değerini tarih değeri olarak almak için kullanılır.
Tüm ilkel veri türleri (Boolean, long, double) ve String için de ResultSet arayüzünde alıcı yöntemler vardır. Veritabanından da bir dizi ve ikili veri türü elde edebiliriz. Bunun için de yöntemleri var.
# 3) Ayarlayıcı / Güncelleyici Yöntemleri
ResultSet Updater yöntemlerini kullanarak Veritabanındaki değeri güncelleyebiliriz. Getter yöntemlerine benzer, ancak burada Veritabanında güncellenmesi için belirli sütun için değerleri / verileri iletmemiz gerekir.
Aşağıdakiler, ResultSet'teki güncelleyici yöntemleridir:
- void updateInt (int ColumnIndex, int Değer): Belirtilen sütun indeksinin değerini bir int değeriyle güncellemek için kullanılır.
- void updateFloat (int ColumnIndex, float f): Belirtilen endeks sütunun değerini float değeri ile güncellemek için kullanılır.
- void updateDate (int ColumnIndex, Date d): Belirtilen endeks sütununun değerini tarih değeri ile güncellemek için kullanılır.
- void updateInt (Dize SütunAdı, int Değeri): Belirtilen sütunun değerini verilen int değeriyle güncellemek için kullanılır.
- void updateFloat (String ColumnName, float f): Belirtilen sütunun değerini verilen float değeri ile güncellemek için kullanılır.
- Java.sql.date getDate (Dize SütunAdı): Belirtilen sütunun değerini verilen tarih değeri ile güncellemek için kullanılır.
Tüm ilkel veri türleri (Boolean, long, double) için Updater yöntemleri ve ResultSet arayüzünde de String vardır.
Updater yöntemleri yalnızca ResultSet nesnesindeki verileri günceller. İnsertRow veya updateRow yöntemi çağrıldıktan sonra değerler DB'de güncellenecektir.
Bir Satırı Güncelleme:
UpdateX () yöntemlerini çağırarak, sütun adını veya dizini ve güncellenecek değerleri ileterek bir satırdaki verileri güncelleyebiliriz. UpdateX yönteminde X yerine herhangi bir veri türünü kullanabiliriz. Şimdiye kadar, ResultSet nesnesindeki verileri güncelledik. Veri tabanındaki verileri güncellemek için updateRow () yöntemini çağırmalıyız.
Satır Ekleme:
İmleci yeni bir satır eklemek üzere hareket ettirmek için moveToInsertRow () kullanmamız gerekir. Bunu zaten Gezinme yöntemleri bölümünde ele aldık. Ardından, verileri satıra eklemek için updateX () yöntemini çağırmamız gerekir. Tüm sütunlar için veri sağlamalıyız, aksi takdirde söz konusu sütunun varsayılan değerini kullanacaktır.
Verileri güncelledikten sonra, insertRow () yöntemini çağırmamız gerekiyor. Ardından, imleç konumunu yeni bir satır eklemeye başlamadan önce bulunduğumuz satıra geri götürmek için moveToCurrentRow () yöntemini kullanın.
Sonuç Kümesi Örneği:
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('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
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('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
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('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
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('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); } } catch (SQLException e) { e.printStackTrace(); } } }
ÇIKTI:
Açıklama:
Yukarıdaki programda yaptığımız şey ilk olarak, SELECT sorgusunu kullanarak Employee_details tablosunun verilerini ResultSet nesnesinde depoladık. Ardından, ResultSet'in last () yöntemini kullanarak staff_details tablosundaki son satırın verilerini görüntüledik. moveToInsertRow () yöntemi, imlecin geçerli satırı göstermesini sağlar, şimdi geçerli satır son satırdır.
Değerleri satıra güncellemek için kullanılan updateXXX () yöntemleri ve insertRow () yöntemi, verileri yeni bir satıra ekledi. Mutlak () yöntemini kullanarak, imleci 5'i gösterecek şekilde yaptıkincikürek çekmek. EMPNUM'u 5'in yeni bir kimliği ile güncellemek için UpdateInt () yöntemi kullanılmıştır.incimasada çalışan. Bundan sonra, EMPNUM'un güncellenip güncellenmediğini kontrol etmek için verileri görüntüleyin.
İmleci last () kullanarak tablonun son satırını gösterecek şekilde yaptı ve onu gösterdi. Yukarıdaki mantığı gerçekleştirmek için, readyStatement yönteminde ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE değerlerini ayarlamamız gerekir.
# 4) Çeşitli Yöntemler
- void close (): ResultSet örneğini kapatmak ve ResultSet örneğiyle ilişkili kaynakları serbest bırakmak için kullanılır.
- ResultSetMetaData getMetaData (): ResultSetMetaData Örneğini döndürür. Sorgu çıktısının sütunlarının türü ve özelliği hakkında bilgi içerir. Bir sonraki bölümde ResultSetMetaData hakkında daha fazla bilgi edineceğiz.
ResultSetMetaData
Meta Veri nedir?
Meta veriler, verilerle ilgili veriler anlamına gelir. Bu arayüzü kullanarak, ResultSet hakkında daha fazla bilgi alacağız. Java.sql paketinde mevcuttur. Her ResultSet nesnesi, bir ResultSetMetaData nesnesiyle ilişkilendirilir.
Bu nesne, sütunun veri türü, sütun adı, sütun sayısı, tablo adı, şema adı gibi sütun özelliklerinin ayrıntılarına sahip olacaktır. ResultSet'in getMetaData () yöntemini kullanarak ResultSetMetaData nesnesini alabiliriz.
ResultSetMetaData Sözdizimi:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
ResultSetMetaData arayüzünün önemli yöntemleri:
Yöntem Adı | Açıklama |
---|---|
boolean isCaseSensitive (int Sütun) | Verilen Sütun Büyük / Küçük Harfe Duyarlıysa doğru, aksi takdirde yanlış döndürür |
String getColumnName (int sütun) | Belirli bir sütunun sütun adını döndürür |
String getColumnTypeName (int sütun) | Parametre olarak aktardığımız belirli bir sütunun veri türünü döndürür. |
GetTableName (int sütun) dizesi | Sütunun tablo adını döndürür |
String getSchemaName (int sütun) | Sütun tablosunun şema adını döndürür |
int getColumnCount () | ResultSet'in sütun sayısını döndürür. |
boolean isAutoIncrement (int Sütun) | Verilen sütun Otomatik Artış ise doğru, yoksa yanlış döndürür |
ResultSetMetaData Örneği
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)); } } }
ÇIKTI:
Açıklama:
c ++ 'da bağlantı listesi
Yukarıdaki programda, ResultSetMetaData arayüzünde getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () ve getSchemaName () yöntemlerini uyguladık.
VeritabanıMetaData
DatabaseMetaData arabirimi Veritabanı hakkında VeritabanıAdı, Veritabanı sürümü vb. Gibi bilgiler verir.
DatabaseMetaData arayüzünün önemli yöntemleri:
Yöntem Adı | Açıklama |
---|---|
String getStringFunctions () | Bağlı Veritabanında bulunan dizi işlevlerinin listesini döndürür |
String getDriverName () | Java programımızda kullandığımız JDBC sürücüsünün adını döndürecektir. |
String getDriverVersion () | JDBC sürücü sürüm numarasını döndürür |
String getUserName () | Kullandığımız Veritabanının kullanıcı adını döndürür. |
String getDatabaseProductName () | Kullandığımız Veritabanının adını döndürür. |
String getDatabaseProductVersion () | Kullandığımız Veritabanının sürüm numarasını döndürür. |
ResultSet getSchemas () | Bağlı Veritabanında bulunan şemaların adlarını döndürür |
String getTimeDateFunctions () | Bağlı Veritabanında bulunan saat ve tarih işlevlerinin listesini döndürür. |
GetURL () dizesi | Veritabanının URL'sini döndürür |
Boolean isReadOnly () | Veritabanının salt okunur modda olup olmadığını döndürür |
Boolean supportsBatchUpdates () | Veritabanının toplu güncellemeleri destekleyip desteklemediğini döndürür |
Boolean desteklerSavepoints () | Veritabanının Savepoints'i destekleyip desteklemediğini döndürür |
Boolean supportsStatementPooling () | Veritabanının İfade Havuzunu destekleyip desteklemediğini döndürür |
Boolean supportsStoredProcedures () | Veritabanının Depolanan prosedürleri destekleyip desteklemediğini döndürür |
Boolean supportsOuterJoins () | Veritabanının Dış Birleştirmeyi destekleyip desteklemediğini döndürür |
Burada, DatabaseMetaData arayüzünün bazı önemli yöntemlerini listeledik. Resmi sitesine başvurabilirsiniz. Oracle DatabaseMetaData arabiriminde bulunan tüm yöntemleri burada görebilirsiniz.
DatabaseMetaData Örneği:
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()); } }
ÇIKTI:
Açıklama:
Yukarıdaki programda getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadOnly (), supportsBatchUpdates , SupportStatementPooling (), SupportSavepoints (), SupportStoredProcedures () ve DatabaseMetaData Interface'deOuterJoins () yöntemlerini destekler.
Dikkat edilecek noktalar:
- JDBC ResultSet arayüzü, veri tabanındaki verileri depolamak ve Java Programımızda kullanmak için kullanılır.
- Verileri updateXXX () yöntemlerini kullanarak güncellemek için ResultSet'i de kullanabiliriz.
- ResultSet nesnesi, imleci sonuç verilerinin ilk satırından önce gösterir. Next () yöntemini kullanarak, ResultSet'i yineleyebiliriz.
- ResultSet nesnesinde daha ileriye gitmek için ResultSet'in gezinme yöntemlerine sahibiz
- ResultMetaData, sütun adı, sütun sayısı, sütunun veri türü vb. Gibi ResultSet hakkında daha fazla bilgi almak için kullanılır.
- DatabaseMetData, bağladığımız veritabanı hakkında bilgi almak için kullanılır.
Sıkça Sorulan Sorular
S # 1) ResultSet'in kullanımı nedir?
Cevap: ResultSet, verileri DB'den depolamak ve almak için kullanılır. ExecuteQuery () yöntemi çalıştırıldığında, ResultSet nesnesini döndürür. Mantığı gerçekleştirmek için bu ResultSet nesnesini programımızda kullanabiliriz.
S # 2) ResultSet'in boş olup olmadığı nasıl kontrol edilir?
Cevap: IsResultSet Empty'i kontrol etmek için length (), size () gibi önceden tanımlanmış yöntemler yoktur. Yinelemek için next () yöntemini kullanabiliriz ve eğer True döndürürse boş değildir, False döndürürse ResultSet boş demektir.
S # 3) ResultSet'in boş olması mümkün mü?
Cevap: Hayır, executeQuery () yöntemi hiçbir zaman boş olmayabilecek ResultSet nesnesini döndürür.
S # 4) Güncellenebilir ResultSet nedir?
Cevap: Sütundaki verileri güncellemek, sütunlara veri eklemek ve satırları silmek için güncellenebilir bir ResultSet nesnesi kullanılır. Bir Sonuç Kümesini güncellenebilir bir Küme yapmak için, kaydırma türünü hassas veya duyarsız ve CONCUR türünü güncellenebilir olarak yapmamız gerekir.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
S # 5) Bağlanan Veritabanı adı nasıl alınır?
Cevap: DatabaseMetaData nesnesinin getDatabaseProductName () yöntemini kullanabiliriz.
Sonuç
Bu eğiticide, ResultSet, ResultSetMetaData ve DatabaseMetaData arabirimlerinin neler olduğunu ve JDBC programlarında yaygın olarak kullanılan önemli yöntemlerini tartıştık. ResultSet kullanarak DB'deki verileri nasıl güncelleyeceğimizi de gördük. ResultSetMetadata, Sütun Adı, Sütun sayısı gibi ResultSet hakkında bilgiler içerir.
DatabaseMetaData, Veritabanı bilgilerini içerir.
Önerilen Kaynaklar
- JDBC DriverManager, JDBC PreparedStatement And Statement
- Java JDBC Eğitimi: JDBC Nedir (Java Veritabanı Bağlantısı)
- Örneklerle Java JDBC İşlem Yönetimi
- JDBC Toplu İşleme ve Depolanan Prosedür Eğitimi
- Programlama Örneği ile Java JDBC Bağlantısı Eğitimi
- Java'da Karşılaştırılabilir ve Karşılaştırıcı Arayüzler
- Selenium Veritabanı Testi (WebDriver ve JDBC API kullanarak)
- JDBC Özel Durum İşleme - SQL İstisnalarını İşleme