İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

ResultSet'ler Hakkında

ResultSet interface'i bir sorgudan dönen sonuçları içerir. Normal şartlar altında sonuçlar ilk satırdan başlayarak sırayla okunur ve gerekli işlemler yapılır. Şu anda üzerinde bulunduğumz satırı belirten kavrama veritabanları terminolojisinde 'Cursor' denir. Cursor normal şartlar altında sadece 'forward' (ileriye doğru) çalışır. Ayrıca ResultSet aksi belirtilmedikçe sadece read-only (salt okunur)'dur, update (güncelleme) yapılamaz. Üzerinde ileri geri harekete edilebilen ResultSet'lere 'scrollable' (gezinilebilir) denir. Güncellemye olanak tanıyan ResultSet'ler de updatable (güncellenebilir) denir.

Gezinilebilir (Scrollable) ResultSet

Bir Statement'in executeQuery() method'undan dönen ResultSet'in scrollabnle olması için Connection interface'inin createStatement() method'u uygun parametrelerle çağrılır :

Statement stmt=connection.createStatement(
	ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

ResulSet bu şekilde alındıktan sonra cursor'un konumu ResultSet'in çeşitli methodlarıyla değiştirlebilir. ResultSet'teki bazı gezinti methodları şunlardır :
previous()Bir önceki satıra dön
next()Bir sonraki satıra geç
first()İlk satıra git
last()Son satıra git
abslote(4)4. satıra git
relative(4)4 satır ileri (-4'se geri) git

BankAccount adında bir tablodan dönen sonuçlar içierisinde çeşitli scroll işlemleri yapan bir örnek :
ScrollableResultSetTest.javaİndir Göster Gizle Kopar Satır Gizle Satır Göster

  1 package com.godoro.samples.jdbc;
  2 import java.sql.*;
  3 public class ScrollableResultSetTest {
  4     
  5   public static void main(String[] args)
  6     throws Exception
  7   {
  8     String driverClass="sun.jdbc.odbc.JdbcOdbcDriver";     
  9     Class.forName(driverClass);       
 10     String url="jdbc:odbc:mydatasource";     
 11     String username="sa";
 12     String password="godoro";
 13     Connection connection = DriverManager.getConnection(url,username,password);
 14     System.out.println("Connected to database");          
 15     Statement stmt=connection.createStatement(
 16             ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
 17     ResultSet rs=stmt.executeQuery("select * from BankAccount");
 18    
 19     
 20     while(rs.next()){
 21       int accountNum=rs.getInt("AccountNumber");
 22       float amount=rs.getInt("Amount");      
 23       System.out.println(accountNum+" : "+amount);        
 24       if(accountNum==345){
 25          if(rs.previous()){      
 26            int accountNumPrevious=rs.getInt("AccountNumber");  
 27            System.out.println("Account before 345 : "+accountNumPrevious);
 28            break;
 29          }
 30       }
 31     }    
 32     if(rs.first()){
 33       int accountNumFirst=rs.getInt("AccountNumber");
 34       System.out.println("First Account : "+accountNumFirst);      
 35     }
 36     if(rs.last()){
 37       int accountNumLast=rs.getInt("AccountNumber");
 38       System.out.println("Last Account : "+accountNumLast);      
 39     }  
 40     if(rs.absolute(4)){
 41       int accountNum4=rs.getInt("AccountNumber");
 42       System.out.println("4th Account : "+accountNum4);      
 43     }      
 44   }
 45     
 46 }

Güncellenebilir (Updatebale) ResultSet

ResultSet'in updatable olması için Connection'un createStatement() method'una parametre olarak ResultSet.CONCUR_UPDATABLE verilir. Result set için herhangi bir hücresini değiştirmek için updateString(), updateInt(), updateFloat() gibi methodlar kullanılır. Ancak bu method'larla değiştirlen verilerin veritabanında da geçerli olması için updateRow() method'u kulllanılır. Örnek :

rs.beforeFirst();
rs.updateString("AccountName","Vadeli");
rs.updateFloat("Amount",500f);
rs.updateRow();    

Yeni bir satır eklemek için insertRow() method'u kullanılır. ResultSet'in en başına (ilk satırdan de öne) gitmek için beforFirst() methodu, en sona (son satırdan da sonraya) gitmek için de afterLast() methodu kullanılır. Örneğin :

rs.afterLast();
rs.updateInt("AccountNumber",999);    
rs.updateFloat("Amount",900f);
rs.insertRow();

Çeşitli update ve insert operasyonları içeren detaylı bir örnek :
UpdateableResultSetTest.javaİndir Göster Gizle Kopar Satır Gizle Satır Göster

  1 package com.godoro.samples.jdbc;
  2 import java.sql.*;
  3 public class UpdateableResultSetTest {
  4     
  5   public static void main(String[] args)
  6     throws Exception
  7   {
  8     String driverClass="sun.jdbc.odbc.JdbcOdbcDriver";     
  9     Class.forName(driverClass);       
 10     String url="jdbc:odbc:mydatasource";     
 11     String username="sa";
 12     String password="godoro";
 13     Connection connection = DriverManager.getConnection(url,username,password);
 14     System.out.println("Connected to database");          
 15     Statement stmt=connection.createStatement(
 16             ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
 17     ResultSet rs=stmt.executeQuery("select * from BankAccount");
 18    
 19     
 20     while(rs.next()){
 21       int accountNum=rs.getInt("AccountNumber");
 22       float amount=rs.getInt("Amount");      
 23       System.out.println(accountNum+" : "+amount);      
 24       if(accountNum==345){
 25         rs.updateFloat("Amount",500f);
 26         rs.updateRow();        
 27         System.out.println("Amount of Account 345 set to 500.");
 28       }
 29     }
 30     rs.beforeFirst();
 31     rs.updateInt("AccountNumber",111);    
 32     rs.updateFloat("Amount",150f);
 33     rs.insertRow();
 34     System.out.println("Account 111 added at the begining");
 35     rs.afterLast();
 36     rs.updateInt("AccountNumber",999);    
 37     rs.updateFloat("Amount",900f);
 38     rs.insertRow();
 39     System.out.println("Account 999 added at the end");
 40     
 41   }     
 42 }

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır