JDBC Temelleri
Bağlantılar, ifadeler ve sonuç kümeleri
JDBC Temelleri, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
JDBC Nedir?
JDBC (Java Veritabanı Bağlantısı), Java'dan ilişkisel veritabanlarıyla iletişim kurmak için kullanılan standart API'dir.
java.sqlpaketi içinde yer alır.- Her veritabanı, JDBC arayüzlerini uygulayan bir sürücüyle birlikte gelir.
- Doğrudan üretici sınıflarını hedef almak yerine
Connection,StatementveResultSetgibi arayüzlere göre kod yazarsınız.
Bu soyutlama, aynı kodun PostgreSQL, MySQL, H2 veya Oracle ile çalışmasını sağlar.
Temel Arayüzler
İşlerin çoğunu üç arayüz gerçekleştirir:
Connection— veritabanıyla açık bir oturum.Statement/PreparedStatement— SQL gönderir.ResultSet— bir sorgunun döndürdüğü satırlar üzerinde gezinen imleçtir.
Bir Connection nesnesini DriverManager veya DataSource üzerinden alırsınız.
Bağlantı Açma
DriverManager.getConnection(url, user, password), etkin bir Connection döndürür.
JDBC URL'si veritabanını tanımlar; örneğin jdbc:postgresql://localhost:5432/shop. Modern sürücüler kendilerini otomatik olarak kaydeder, bu nedenle artık Class.forName(...) çağırmazsınız.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Main {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/shop";
try (Connection conn = DriverManager.getConnection(url, "app", "secret")) {
System.out.println("Connected: " + !conn.isClosed());
} catch (SQLException e) {
System.out.println("Connection failed: " + e.getMessage());
}
}
}Kaynaklarla try
Connection, Statement ve ResultSet nesnelerinin tümü AutoCloseable uygular.
Bir istisna atılsa bile otomatik olarak kapanmaları için bunları her zaman bir kaynaklarla try bloğunun içinde açın. Bağlantıları açık bırakmak veritabanının kapasitesini kısa sürede tüketir.
- Kaynaklar ters sırayla kapanır.
finallybloğuna gerek yoktur.
Sorgu Çalıştırma
Basit bir SELECT için bir Statement oluşturun ve bir ResultSet döndüren executeQuery yöntemini çağırın.
Örnekte, gerçek bir veritabanı olmadan akışı görebilmeniz için bellek içi bir benzetim kullanılmıştır. Üretim ortamında SQL, bağlantı üzerinden çalıştırılır.
import java.util.List;
public class Main {
public static void main(String[] args) {
// Simulated result of: SELECT name FROM users
List<String> names = List.of("Ada", "Linus", "Grace");
System.out.println("Query returned " + names.size() + " rows:");
for (String name : names) {
System.out.println(" - " + name);
}
}
}ResultSet Okuma
Bir ResultSet, ilk satırın önünde başlar. Bir döngü içinde rs.next() çağırın; başka satır kalmadığında false döndürür.
Sütunları adlarıyla veya 1 tabanlı dizinle, tür uyumlu alıcılar kullanarak okuyun:
rs.getInt("id")rs.getString("name")rs.getDouble("price")
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/shop";
try (Connection conn = DriverManager.getConnection(url, "app", "secret");
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT id, name FROM users")) {
while (rs.next()) {
System.out.println(rs.getInt("id") + ": " + rs.getString("name"));
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}Yazma İşlemleri için executeUpdate
INSERT, UPDATE ve DELETE için executeUpdate kullanın. Bu yöntem bir int döndürür: etkilenen satırların sayısını.
İfadenin bir sonuç kümesi döndürüp döndürmeyeceğini önceden bilmiyorsanız yalnızca execute kullanın.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/shop";
try (Connection conn = DriverManager.getConnection(url, "app", "secret");
Statement st = conn.createStatement()) {
int rows = st.executeUpdate("DELETE FROM sessions WHERE expired = true");
System.out.println("Deleted " + rows + " rows");
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}Satırları Nesnelere Eşleme
Çoğu uygulama her satırı bir etki alanı nesnesine dönüştürür. ResultSet üzerinde döngü kurun ve örnekler oluşturun.
İşte bu işlemin kalıbı; tek başına çalışabilmesi için benzetim kullanılmıştır. Bir record eşlemeyi kısa ve öz hâle getirir.
import java.util.ArrayList;
import java.util.List;
public class Main {
record User(int id, String name) {}
public static void main(String[] args) {
// Stand-in for iterating a ResultSet
String[][] rows = {{"1", "Ada"}, {"2", "Linus"}};
List<User> users = new ArrayList<>();
for (String[] row : rows) {
users.add(new User(Integer.parseInt(row[0]), row[1]));
}
users.forEach(System.out::println);
}
}SQLException İşleme
Neredeyse her JDBC yöntemi, denetlenmiş SQLException istisnasını oluşturabilir.
Bu istisna yararlı tanılama bilgileri taşır:
getMessage()— insanların okuyabileceği metin.getSQLState()— standart 5 karakterli durum kodu.getErrorCode()— üreticiye özgü kod.
Bunları yok saymak yerine günlüğe kaydedin.
import java.sql.SQLException;
public class Main {
public static void main(String[] args) {
SQLException e = new SQLException("duplicate key", "23505", 7);
System.out.println("Message: " + e.getMessage());
System.out.println("SQLState: " + e.getSQLState());
System.out.println("ErrorCode: " + e.getErrorCode());
}
}DatabaseMetaData
conn.getMetaData(), veritabanının kendisini açıklayan bir DatabaseMetaData nesnesi döndürür.
Bu nesne ürün adını ve sürümünü, desteklenen özellikleri ve hatta tabloları ve sütunları listeleyebilir. Şema tarayıcıları gibi araçlar, üretici ayrıntılarını sabit kodlamadan böyle çalışır.
Bir Araya Getirme
Tipik bir okuma akışı:
- Kaynaklarla try kullanarak bir
Connectionaçın. - Bir
Statement(veya daha iyisi birPreparedStatement) oluşturun. executeQueryçağırın vers.next()ile döngü kurun.- Sütunları nesnelere eşleyin.
- Her şeyi kaynaklarla try yapısının kapatmasını sağlayın.
Sonraki derste sorguları enjeksiyona karşı güvenli hâle getireceğiz.
Hızlı Kontrol
Statement.executeUpdate ne döndürür?
Özet
Artık JDBC'nin temel akışını biliyorsunuz:
DriverManager.getConnectionbirConnectionaçar.StatementSQL gönderir;executeQuerybirResultSetdöndürür,executeUpdateise etkilenen satırların sayısını döndürür.rs.next()ve tür uyumlu alıcılarla yineleme yapın.- Her zaman kaynaklarla try kullanın ve
SQLExceptionistisnasını durum ve hata kodlarıyla birlikte ele alın.
Sıkça Sorulan Sorular
“JDBC Temelleri” dersi ücretsiz mi?
Evet — “JDBC Temelleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“JDBC Temelleri” dersinde ne öğreneceğim?
Bağlantılar, ifadeler ve sonuç kümeleri Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“JDBC Temelleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- JDBC Temelleri
- PreparedStatement
- İşlemler
- HikariCP ile Bağlantı Havuzlama