İçeriğe geç
← Blog

Java ile Oracle’dan bilgi çekme

14 Haziran 2009, 13:20 Java 4 dk 23.3k 9

Java uygulamalarında Oracle veritabanı ile iletişim kurmanın en yaygın yolu JDBC (Java Database Connectivity) API’sini kullanmaktır. JDBC sayesinde veritabanına bağlanabilir, SQL sorguları çalıştırabilir ve dönen sonuçları Java uygulamamız içerisinde kolayca işleyebiliriz.

Bu yazıda, Oracle veritabanına nasıl bağlanacağımızı ve basit bir SQL sorgusu ile verileri nasıl okuyabileceğimizi adım adım inceleyeceğiz.

Gerekli Kütüphaneler

İlk olarak Oracle JDBC sürücüsünü kullanabilmek için gerekli kütüphaneleri projemize eklememiz gerekiyor.

Java
import java.sql.*;
import oracle.jdbc.pool.OracleDataSource;

Bu kütüphaneler; veritabanına bağlantı kurmak, SQL sorguları çalıştırmak ve sorgu sonuçlarını okumak için gerekli olan temel JDBC sınıflarını içerir.

Connection String

Oracle veritabanına bağlanabilmek için bir bağlantı adresine (connection string) ihtiyacımız vardır.

String connection_string = "jdbc:oracle:thin:hr/hr@localhost:1521:XE";

Bu bağlantı bilgisindeki;

  • hr : Kullanıcı adı
  • hr : Şifre
  • localhost : Oracle sunucusunun adresi
  • 1521 : Oracle Listener portu
  • XE : Oracle veritabanı servis adı (Express Edition)

Oracle’ın örnek kurulumlarında genellikle HR kullanıcısı bulunur. Eğer kendi oluşturduğunuz bir kullanıcı hesabı ile çalışıyorsanız, kullanıcı adı ve şifre bilgilerini buna göre güncellemeniz gerekir.

Oracle Veritabanına Bağlanmak

Şimdi Oracle veritabanına bağlanıp COUNTRIES tablosundaki kayıtları okuyalım.

Java
package com.gklp.oracle;

import oracle.jdbc.pool.OracleDataSource;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

public class OracleDataReader {

    public static void main(String[] args) {

        String connectionString = "jdbc:oracle:thin:hr/hr@localhost:1521:XE";

        try {
            OracleDataSource dataSource = new OracleDataSource();
            dataSource.setURL(connectionString);

            Connection connection = dataSource.getConnection();
            Statement statement = connection.createStatement();

            ResultSet resultSet = statement.executeQuery("SELECT * FROM COUNTRIES");

            int rowNumber = 1;

            while (resultSet.next()) {
                System.out.println(
                        rowNumber + "\t" +
                        resultSet.getString(1) + "\t" +
                        resultSet.getString(2) + "\t" +
                        resultSet.getString(3)
                );

                rowNumber++;
            }

        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}


Kodun Adım Adım İncelenmesi

Kodun çalışma mantığını daha iyi anlayabilmek için kullanılan temel nesnelerin görevlerine tek tek bakalım.

İlk olarak OracleDataSource nesnesini oluşturuyoruz.

OracleDataSource ods = new OracleDataSource();

Bu nesne Oracle veritabanına bağlanabilmek için gerekli bağlantı bilgilerini yönetir.

Ardından hazırladığımız bağlantı bilgisini (connection string) bu nesneye tanımlıyoruz.

ods.setURL(connection_string);

Bu işlemden sonra getConnection() metodunu çağırarak Oracle veritabanı ile fiziksel bağlantıyı oluşturuyoruz.

conn = ods.getConnection();

Bağlantımız hazır olduğuna göre artık SQL sorgularını çalıştırabiliriz. Bunun için bir Statement nesnesi oluşturuyoruz.

Statement stmt = conn.createStatement();

Statement nesnesi, SQL ifadelerini Oracle veritabanına göndermemizi sağlar.

Ardından SQL sorgumuzu çalıştırıyoruz.

rset = stmt.executeQuery("SELECT * FROM COUNTRIES");

executeQuery() metodunun dönüş değeri bir ResultSet nesnesidir. Bu nesne sorgudan dönen tüm kayıtları bellekte temsil eder.

Şimdi bu kayıtları okumamız gerekiyor.

while (rset.next()) {

next() metodu her çağrıldığında bir sonraki kayda geçer. Okunacak kayıt olduğu sürece true, kayıtlar bittiğinde ise false döndürür. Bu nedenle while döngüsü kullanılarak tüm satırlar kolayca okunabilir.

Her satır içerisindeki sütun değerlerine ise getString() metodu ile erişiyoruz.

rset.getString(1);
rset.getString(2);
rset.getString(3);

Buradaki sayılar sütun indekslerini ifade eder. İstenirse sütun isimleri kullanılarak da veri okunabilir.

Son olarak okuduğumuz verileri konsola yazdırıyoruz.

System.out.println(...);

Bu örnek çalıştırıldığında COUNTRIES tablosundaki tüm kayıtlar satır satır ekrana yazdırılacaktır.

Sonuç

Bu örnekte Oracle JDBC sürücüsünü kullanarak Oracle veritabanına bağlandık, SQL sorgumuzu çalıştırdık ve dönen sonuçları ResultSet nesnesi üzerinden okuyarak ekrana yazdırdık.

JDBC’nin temel mantığını öğrendikten sonra aynı yaklaşımı kendi tablolarınız, görünümleriniz (View) ve SQL sorgularınız için de rahatlıkla uygulayabilirsiniz.

Bu örnek yalnızca veri okuma işlemini göstermektedir. Bir sonraki adımda INSERT, UPDATE ve DELETE işlemlerinin nasıl gerçekleştirileceğini inceleyebilirsiniz.

9 yorum

  1. hocam mrb , kodu aynen kopyalayıp çalıştırdım ancak “I/O Got minus one from a read call” exception veriyor. 2 gundur oracle bağlantısı kurmaya çalışıyorum jsp,php java ile denedim bir türlü başaramadım. Simdi uzaktaki servera erişmem için bilgisayarımda herhangi bi oracle yazılımı yuklu olması gerekli mi ? Ayrıca oracle 10 g express edition kurdum kendi makinemdeki database erişeyim dedim yine olmadı, sizin kodu kendi makinemdeki databasee erişmek icin kullandım yukarıdaki hatayı aldım. Bide burda database ismini falan seçmedik acaba bi sorun yaratmıyor mu bu durum ?

  2. Gayet hos yanliz ne zamandir bu tarz seylerde herseyi ingilizce gormemden dolayi, kullandigin bazi kelimeler bana cok garip geldi demeliyim 🙂

    Orn. bağlantı karakter kümemizi vs.

    Neyse bu tarz makalelerin devami blog reader’lar icin cok yararli olacaktir.

  3. Hoca iyi çalişmalar,
    Ben javada gerçekten çok yeniyim..
    Sormak istediğim bi mevzu var ben Netbeans IDE 7 kullanıyorum ama yukardaki programda yazdığınız kütüpanelerden biri olan
    import oracle.jdbc.pool.OracleDataSource; kütüphanesini tanımıyor. Ne yapmam gerek acaba??

  4. ellerinize sağlık.. ben eclipse kullanıyorum ve consoleda şu çıktıyı alıyorum veri yok neden olabilir?

    testing oracle-character-set-1 against
    PASSED LOSSY
    testing oracle-character-set-1 against
    PASSED LOSSY
    testing oracle-character-set-1 against
    PASSED LOSSY
    testing oracle-character-set-1 against
    PASSED LOSSY
    testing oracle-character-set-31 against
    PASSED LOSSY
    testing oracle-character-set-31 against
    PASSED LOSSY
    testing oracle-character-set-31 against
    PASSED LOSSY
    testing oracle-character-set-31 against
    PASSED LOSSY
    testing oracle-character-set-870 against
    PASSED
    testing oracle-character-set-870 against
    PASSED
    testing oracle-character-set-870 against
    PASSED
    testing oracle-character-set-870 against
    PASSED
    testing oracle-character-set-871 against
    PASSED
    testing oracle-character-set-871 against
    PASSED
    testing oracle-character-set-871 against
    PASSED
    testing oracle-character-set-871 against
    PASSED