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

Statement'ler Hakkında

Statement (ifade), bir seferde veri tabanına gönderilen sorguyu temsil eder. Bir connection'la birden fazla statement kullanılabilir. Normalde statement bir SQL metini çalıştırmak için kullanılır. Ancak statement'in değişik kullanımları da vardır.

Batch Çalıştırma

İstenirse birden fazla SQL ifadesi 'batch' (toplu) olarak yani tek seferde çalıştırılabilir. Bunun için öncelikle çalıştılacak SQL ifadeleri Statement'in addBatch() methoduyla eklenmesi gerekir. Eklenecekler bittikten sonra hepsini birden çalıştırmak için de Statement'in executeBatch() methodu kullanılır.
BatchTest.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 BatchTest {
  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     stmt.addBatch("insert BankAccount(AccountNumber,Amount) VALUES (345,1500)");
 17     stmt.addBatch("insert BankAccount(AccountNumber,Amount) VALUES (456,2300)");
 18     stmt.addBatch("insert BankAccount(AccountNumber,Amount) VALUES (567,4200)");
 19     int[] results=stmt.executeBatch();
 20     for(int i=0;i<results.length;i++){
 21         System.out.println("Affected count for batch "+i+" : "+results[i]);
 22     }
 23     
 24   }
 25     
 26 }

Bu örnekte, BankAccount tablosunda üç tane satır, batch olarak eklenmekte ve tek seferde çalıştırılmaktadır.

Prepared Statement (Hazırlanmış İfade)

Bir SQL metni statement aracılığıyla veritanbanına yollanınca veritabanı tarafından önce derlenir (yani SQL string'den çalıştırabileceği şekle çevirir). Bu işlem az ya da çok bir zaman almaktadır. Oysa bir uygulama veritabanınan birbirine çok benzeyen, sadece bazı parametreleri farklı bir çok SQL ifadesi yollar. Prepared Statement, bir SQL ifadesinin bir kez derlenerek bir farklı parametrelerle tekrar tekrar kullanmasını sağlar. Yani önceden sadece bir kere derleme yapılır ve istendiği kadar kullanılabilir.

PreparedStatement, Connection'un prepareStatement() ile yaratılır. Parametre olarak verile SQL ifadesinde sorgudan sorguya değişen kısımlara soru işareti ('?') konur. Bunlar, parametrelerin daha sonra yerleştirileceği yerle anlamına gelir. Çalıştırmadan önce de bu parametrelerin değerleri atanır. Kullanım örneği.

String sql="insert into TestTable(IntegerField,StringField,FloatField)  values(?,?,?)";
PreparedStatement prepared=connection.prepareStatement(sql);
prepared.setInt(1,123);
prepared.setString(2,"ABC");    
prepared.setFloat(3,3.14f); 

Burada Test tablosunun IntegerField,StringField ve FloatField alanlarını insert işlemi yapan bir SQL vardır. Üç alan için sırasıyla üç soru işlareti konmuştur. Çalıştırma esnasında da PreparedStatement'in setInt(), setString() ve setFloat() methodlarıyla da asıl değerlen yerleştirilmektedir. Bu methodlara verilen rakam parametre sıra numarasıdır. Örneğin tam hali
PreparedStatementTest.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 PreparedStatementTest {
  4     
  5   public static void main(String[] args)
  6     throws Exception
  7   {    
  8       
  9     String driverClass="sun.jdbc.odbc.JdbcOdbcDriver";     
 10     Class.forName(driverClass);      
 11     String url="jdbc:odbc:mydatasource";     
 12     String username="sa";
 13     String password="godoro";
 14     Connection connection = DriverManager.getConnection(url,username,password);
 15     System.out.println("Connected to database");    
 16     String sql="insert into TestTable(IntegerField,StringField,FloatField)"
 17                 +" values(?,?,?)";
 18     PreparedStatement prepared=connection.prepareStatement(sql);
 19     prepared.setInt(1,123);
 20     prepared.setString(2,"ABC");    
 21     prepared.setFloat(3,3.14f);      
 22        
 23     prepared.executeUpdate();
 24     System.out.println("Prepared statement executed");      
 25     
 26       
 27   } 
 28         
 29     
 30 }

Callable Statement (Çağrılabilir İfade)

Bazı durumlarda SQL ifadesi veritabanında bulunur, uygulama içerisinden gerekli parametreler verilerek çağrılır. Veritabanında tanımlı sorgular SQL olabilececeği gibi o veritabınının desteklediği herhangi bir dil de olabilir. Örneğin MS SQL Server'da Transact-SQL diliyle Stored Procedure adı verilen prosedürler yazılabilir. Uygulama tarafında bilinmesi gereken sadece çağırlacak ifadedin adı ve gerekli parametrelerdir. Bunun için Connection'un prepareCall() methoduyla CallableStatement yaratılır.

    CallableStatement callable=connection.prepareCall("{call TestProcedure(?)}");

Daha sonra varsa parametre değerleri atanır

    callable.setString(1,"ABC");

Daha sonra da sorgu çağrılır.

    ResultSet rs=callable.executeQuery();

Çağrılan method executeQuery() olduğu gibi executeUpdate()'de olabilir. Burada SQL server'da tanımlanmış bir Stored Procedure'ü çağrılmaktadır. Örneğin tamamı :
CallableStatementTest.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 CallableStatementTest {
  4     
  5   public static void main(String[] args)
  6     throws Exception
  7   {    
  8       
  9     String driverClass="sun.jdbc.odbc.JdbcOdbcDriver";     
 10     Class.forName(driverClass);      
 11     String url="jdbc:odbc:mydatasource";     
 12     String username="sa";
 13     String password="godoro";
 14     Connection connection = DriverManager.getConnection(url,username,password);
 15     System.out.println("Connected to database");    
 16     CallableStatement callable=connection.prepareCall("{call TestProcedure(?)}");
 17     callable.setString(1,"ABC");
 18     ResultSet rs=callable.executeQuery();
 19     while(rs.next()){
 20         int i=rs.getInt("IntegerField");
 21         String s=rs.getString("StringField");        
 22         float f=rs.getFloat("FloatField");                
 23         System.out.println(i+" "+s+" "+f);
 24     }      
 25     System.out.println("Callable Statement executed");          
 26       
 27   } 
 28     
 29 }

Dosya Listesi

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