JDBC (Java Database Connectivity) Java programlama dili ile ilişkisel bir veritabanına erişimi ve veritabanı işlemlerini tanımlayan ve bu işlemlerin gerçekleştirilmesini sağlayan bir uygulama arayüzüdür.

Bu yazının yazılma tarihinde JDBC, 4.1 API versiyonu ile Java SE 7 platformunda yer almaktadır. JDBC ile ilgili sınıflar ve methodlar temel olarak java.sql ve javax.sql paketlerinde bulunmaktadır.

Bu temel bilgilerden sonra JDBC ile bir veritabanına bağlantı kurma ve bu bağlantı üzerinden temel veritabanı işlemleri yapmaya geçebiliriz. Örnek uygulamada MySql veritabanını kullanılmıştır.

Öncelikle bağlanabileceğimiz bir veritabanı olması gerekiyor 🙂 . Bunun için “db_uygulama” adında bir veritabanı yarattım ve bu veritabanında “kullanicilar” adında bir tablo oluşturdum.

CREATE DATABASE `db_uygulama`
CREATE TABLE `db_uygulama`.`kullanicilar` (
`ID` INT( 255 ) NOT NULL ,
`AD` VARCHAR( 255 ) NOT NULL ,
`NICK` VARCHAR( 255 ) NOT NULL ,
`SEHIR` VARCHAR( 255 ) NOT NULL ,
`E_POSTA` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `ID` )
) ENGINE = InnoDB CHARACTER SET utf8

Şimdi de bir kaç tane kullanıcı ekleyelim.

INSERT INTO `db_uygulama`.`kullanicilar` (`ID`, `AD`, `NICK`, `SEHIR`, `E_POSTA`) 
VALUES ('2', 'Mehmet', 'memo', 'İstanbul', 'memo@memo.com');

INSERT INTO `db_uygulama`.`kullanicilar` (`ID`, `AD`, `NICK`, `SEHIR`, `E_POSTA`) 
VALUES ('5', 'Hüseyin', 'hüseyin', 'Ankara', 'huseyin@huseyin.com');

INSERT INTO `db_uygulama`.`kullanicilar` (`ID`, `AD`, `NICK`, `SEHIR`, `E_POSTA`) 
VALUES ('61', 'Fatih', 'fatih61', 'Trabzon', 'fth@fatih.com');

INSERT INTO `db_uygulama`.`kullanicilar` (`ID`, `AD`, `NICK`, `SEHIR`, `E_POSTA`) 
VALUES ('8', 'Ayşe', 'ayse', 'İzmir', 'ayse@ayse.com');

Veritabanımız hazır olduğuna göre şimdi Eclipse de bir proje açalım. Bu pojeye kullandığımız mySql veritabanı ile JDBC arasında köprü vazifesi görecek sürücüyü eklememiz gerekiyor. Bunun için http://www.mysql.com/downloads/connector/j/ adresinden JDBC için MySQL Connector’ü indirip içindeki JAR dosyasını Project->Properties->Java Build Path->Libraries->Add External JARs.. yolu ile projeye dahil ediyoruz.

Veritabanı ile bağlantı kurmanın en kolay yolu DriverManager sınıfının getConnection methodunu kullanmaktır. Bu method bağlantı yapmaya çalışırken de otomatik olarak daha önceden Java Build Path e eklediğimiz sürücüyü kullanır.

Veritabanına Sql sorgusu göndermek için Statement, PreparedStatement ve CallableStatement, bir sorgunun sonucunu almak için ise ResultSet arayüzleri kullanılır.

Bu kullanımları örneklendiren programımız şöyledir;

package jdbc;

import java.sql.*;

public class JDBCIslemler {

	private final static String URL = "jdbc:mysql://localhost/db_uygulama";
	private final static String USERNAME = "root";
	private final static String PASSWORD = "";
	
	private static String SELECT_QUERY = "SELECT * FROM `kullanicilar`";
	private static String INSERT_QUERY = "INSERT INTO `kullanicilar` "
		+ "(`ID`, `AD`, `NICK`, `SEHIR`, `E_POSTA`) VALUES "
		+ "(?,?,?,?,?)";
	private static String DELETE_QUERY = "DELETE FROM `kullanicilar` "
		+ "WHERE `kullanicilar`.`ID` = ?";
		
	private static Connection con;

	public static void main(String[] args) {

		try {
			// bağlantı kur
			con = veritabaninaBaglan();
			// Bütün kullanıcıları getir ve ekrana bas
			kullanicilariListele();		
			// Kullanıcı ekle		
			kullaniciEkle(12, "Ali", "ali", "Konya", "ali@ali.com");		
			// Kullanıcı sil
			kullaniciSil(5);
			// Son olarak listele
			kullanicilariListele();	

		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("Veritabanı hatası!");
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("Bir hata oluştu! Ayrıntı için konsola bakın.");
		}	
	}

	private static void kullanicilariListele() throws SQLException {
		Statement stmt = con.createStatement();
		ResultSet rs = stmt.executeQuery(SELECT_QUERY);
		// sorgu sonucu oluşan tabloyu ekrana bas
		ekranaBas(rs);
	}
	
	private static void kullaniciEkle(int ID, String ad, String nick, String sehir, String eposta) throws SQLException {
		PreparedStatement prpstmt = null;
		
		prpstmt = con.prepareStatement(INSERT_QUERY);
		prpstmt.setInt(1, ID);
		prpstmt.setString(2, ad);
		prpstmt.setString(3, nick);
		prpstmt.setString(4, sehir);
		prpstmt.setString(5, eposta);
		// sorguyu gönder
		prpstmt.executeUpdate();
		
		System.out.println( "\n***" + ID + " id'li kullanıcı eklendi.");
	}
	
	private static void kullaniciSil(int ID) throws SQLException {
		PreparedStatement prpstmt = null;	
		
		prpstmt = con.prepareStatement(DELETE_QUERY);
		prpstmt.setInt(1, ID);
		// sorguyu gönder
		prpstmt.executeUpdate();
		
		System.out.println( "\n***" + ID + " id'li kullanıcı silindi.");
	}
	
	private static Connection veritabaninaBaglan() throws SQLException {
		Connection con = null;		
		con = DriverManager.getConnection(URL, USERNAME, PASSWORD);		
		return con;		
	}

	private static void ekranaBas(ResultSet rs) throws SQLException {
		// başlık isimleri için
		ResultSetMetaData rsmd = rs.getMetaData();

		// başlıkları ekrana bas
		int i;
		for (i = 1; i <= rsmd.getColumnCount(); i++) {

			System.out.print(rsmd.getColumnLabel(i));
			System.out.print("\t");
		}

		System.out.println("");
		// Bütün verileri ekrana bas
		while (rs.next()) {

			int ID = rs.getInt("ID");
			String ad = rs.getString("AD");
			String kullaniciAdi = rs.getString("NICK");
			String sehir = rs.getString("SEHIR");
			String eposta = rs.getString("E_POSTA");

			System.out.println(ID + "\t" + ad + "\t" + kullaniciAdi + "\t"
					+ sehir + "\t" + eposta);
		}
	}
}

Programın Çıktısı
Etiketler: , ,

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.