☕ Java → SQL

Java → SQL: JDBC'yi, iki farklı dili konuşan iki kişi arasındaki tercüman gibi düşün. Java nesnelerle konuşur (`TestResult` nesnesi, `List `, tip güvenliği); SQL ise satır ve süt

JDBC'yi, iki farklı dili konuşan iki kişi arasındaki tercüman gibi düşün. Java nesnelerle konuşur (`TestResult` nesnesi, `List `, tip güvenliği); SQL ise satır ve sütunlarla. JDBC arada durur, cümleyi bir yandan alır öbür yana çevirir — ve her tercümede olduğu gibi, bazı nüanslar yolda kaybolur. Peki tercüman varsa neden SQL öğrenmek zorundayız — ORM kullanıp Java tarafında kalamaz mıyız? Kalabilirsin, taa ki bir şey yavaşlayana kadar. ORM'in ürettiği sorguyu okuyamayan bir mühendis, 100 kayıt için 101 sorgu atan N+1 problemini fark edemez; hata mesajı da vermez, sadece sayfa yavaşlar. Tercümanın ne dediğini anlamıyorsan, yanlış çevirdiğini de anlayamazsın. İki dünya arasındaki eşleşmeler tanıdıktır ama birebir değildir: `Connection` = oturum, `PreparedStatement` = parametreli sorgu (ve SQL Injection'a karşı yapısal savunma), `ResultSet` = imleçli sonuç kümesi, `conn.setAutoCommit(false)` + `commit()`/`rollback()` = transaction sınırları. En sık atlanan fark ise kaynak yönetimidir: Java'da GC nesneleri toplar, ama açık kalan bir `Connection` veya `ResultSet`'i toplamaz — bunlar `try-with-resources` ile kapatılmazsa connection pool tükenir ve uygulama, veritabanı ayaktayken 'veritabanına bağlanılamıyor' demeye başlar. Java ile Selenium veya REST Assured testleri yazan bir QA mühendisi için bu bölüm günlük başvuru kılavuzudur: test setup'ında veriyi JDBC ile hazırlar, assertion aşamasında UI/API'nin iddiasını veritabanındaki gerçekle karşılaştırırsın.

☕ Java Biliyorsan: Veritabanı Bağlantısı Köprüsü

Java'da JDBC kullanırsın — pom.xml'e sürücü ekler, DriverManager.getConnection() çağırırsın. Python'da sqlite3 yerleşik (sıfır kurulum!) ve PostgreSQL için psycopg2 var. Kalıp aynı: bağlantı aç → kullan → kapat.

sqlite3 Python standart kütüphanesinde — Maven yok, pip yok, pom.xml yok! Sadece import et ve kullan. pip install psycopg2-binary tek bir Maven bağımlılığı eklemeye eşdeğer.

Java'da JDBC sürücü bağımlılıklarını pom.xml'de bildirirsin, Maven indirir. Python'da pip install sürücüyü indirir. SQLite için hiçbir şey gerekmez — Python ile birlikte gelir.

Python SQLite için en hızlı başlangıcı sağlar. Gerçek proje bağımlılıkları için requirements.txt kullan (pom.xml ile aynı fikir). pip install -r requirements.txt her şeyi kurar.

☕ Java Biliyorsan: Veritabanı Erişim Köprüsü

Java, JDBC DriverManager ile URL + kimlik bilgileriyle bağlanır. Python, hafif sürücü modülleri kullanır (sqlite3 yerleşik, PostgreSQL için psycopg2). Bağlantı mantığı aynı — API farklı.

Python sqlite3, Python'a yerleşik gelir — pip kurulumu gerekmez. MySQL: mysql-connector-python; PostgreSQL: psycopg2.

Java, rs.next() döngüsü ve sütun adıyla getter metodlar içeren ResultSet kullanır. Python'un cursor.fetchall() metodu basit bir demet listesi döndürür — çok daha az kod.

cursor.fetchall() tüm satırları demet listesi olarak döndürür. cursor.fetchone() bir satır ya da None döndürür — rs.next() bir kez çağırmaya eşdeğer.

☕ Java Biliyorsan: DML Operasyonları Köprüsü

Java kurumsal projelerinde büyük ihtimalle JPA/Hibernate (EntityManager.persist) ile nesne ekliyordunuz. SQL'de INSERT INTO doğrudan yazılır. İkisi de aynı SQL'i üretir — JPA sadece bunu sizin yerinize oluşturur.

SQL INSERT açık ve güçlüdür — toplu insert'ler ve INSERT-SELECT'in JPA'da custom query olmadan karşılığı yoktur. Test otomasyonunda hız ve sadelik için doğrudan SQL tercih edilir.