Beyza'nın Blogu

SQL

JDBC ve ODBC nedir?

▶ Programla dili ile veritabanına bağlanıp erişmek, veri yazmaya, veri okumaya, kolon isimlerini veya meta data’ları okumaya yarayan teknolojidir. 3 katman şeklinde düşünürsek en altta veritabanı katmanı, ortada bağlantı katmanı ( JDBC, ODBC, ADO.NET ), en üstte programlama dili yani uygulama çalışacak şekilde düşünebiliriz. Kısaca uygulamanın veritabanına erişen kısmını bağlantı katmanı halleder.

Veritabanının programlama dilinden soyutlanmış olmasını bekleriz (database abstarction). Eğer farklı bir teknolojiye geçilirse programlama dilinin değişikliklerden yani tablo isimlerinden ve özelliklerinden etkilenmemesi beklenir. Bu sayede yeniliklere kolayca entegre edilebilir.

SQL Injection Nedir ?

▶ SQL Injection, bir kullanıcının bir web uygulaması aracılığıyla veritabanına kötü niyetli SQL kodları ekleyerek veritabanında istenmeyen değişiklikler yapmasına veya hassas bilgilere erişmesine olanak tanıyan bir işlem türüdür.

» select * from egitmen where isim = ‘” + isim + “‘ // ‘” + isim + “‘ gibi sql alanlarına bir sql satırını enjekte eder.

Eğer kullanıcı, isim parametresine X’ or ‘Y’ = ‘Y gibi bir ifade girerse

» select * from egitmen where isim = ‘X’ or ‘Y’ = ‘Y’

Bu sorgu, veritabanına herhangi bir mantıksal koşulun doğru olduğu bir şekilde yönlendirilir ve genellikle tüm verilerin çekilmesine neden olabilir. Ayrıca banka hesaplamaları gibi kritik hesaplamalarda sorunlar yaratabilir.

Bu tür işlemlerde korunmak için hazır ifadeler (prepared statements) kullanılması gerekir. Hazır ifadelerde kullanıcı girdileri doğrudan SQL sorgusuna eklenmez, parametreler olarak kullanılır, bu da SQL enjeksiyonunu engeller.

JDBC, ODBC ve ADO.NET yani hepsinde bir risk söz konusudur

Metadata Features Nedir?

▶ Veritabanından dönen sonuç kümesinin üst bilgisini yani Meta’sını, o bilgiliyle ilgili bilgileri döndürebilmektir. Örneğin kullanıcı bilgilerini aldığımızda o kullanıcının adı, şifresi gibi bilgilerin yanında kolon adlarının gelmesi, veri tiplerinin alınması üst bilgi olarak kabul edilmektedir.

JDBC'de Transaction Kontrolü

▶ Programlama dili üzerinden Transaction kontrolü yapmaktır. Genellikle veritabanına hakim programcılar bu işlemi yapar.

setAutoCommit(false)                                // yapılan değişikliklerin otomatik olarak uygulanmasını kapatır.
Sonrasında bu işlemi el ile yapmak için
commit()
rollback()


Komutları çağrılır.Eğer sonrasında yapılan değişikliklerin otomatik olarak uygulanmasını istersek
setAutoCommit(true)
metodunu çalıştırabiliriz.

JDBC'de Blob ve Clob

Büyük objelerin alınması ve RAM’e yüklenmesi büyük problemdir.(Örn: 10 GB’lık video yüklemek gibi). Bunları normal bir şekilde almak bilgisayarımızı kullanılamaz hale getireceği için stream şeklinde almak daha mantıklıdır.

 

SQLJ

JDBC’ye alternatif olarak kullanılabilecek bir teknolojidir. Java’nın içinden SQL komutlarını çağırmaya yarar.

ODBC (Open Database Connectivity)

▶ Hemen hemen her şeyi destekler; veritabanları, excel… . Aslında bir bağlantı teknolojisidir. Çoğu programlama dilini destekler. Veritabanı üreticileri ve programalama dil üreticileri arasındaki ortak bir protokol gibi düşünülebilir. En yavaş ve en kötü çalışan teknolojilerden birisidir. Bir API’ye sahiptir.
Veritabanıyla bağlantı açma
    Sorgu ve güncellemeler gönderme
    Sonuçları geri alma
gibi işlemler yapabiliriz.

SQL_NTS şeklinde bir özel karakterimiz vardır. ODBC API’sinde kullanılan bir sabittir. Veritabanı sorgularında dizenin sonunu göstermek için kullanılır. Eğer bir dize null (\0) karakteri ile sonlandırılmışsa, SQL_NTS sayesinde dize uzunluğu belirtmeye gerek kalmaz; ODBC bu null karakterini görerek dizenin bittiğini anlar.

ADO.NET

▶ Microsoft’un bir teknolojisidir. Visual Basic ve .NET ile gelen bir teknolojidir.
▶ .NET’in kullandığı bütün programlama dillerine uygundur.
OLE-DB adında bir alternatif teknolojisi vardır.

 

EMBEDDED SQL (Gömülü SQL)

▶ SQL cümlelerini bir programlama dilinin içinden yazmaya yarar. C,Java ve Cobol’da kullanılır.

» EXEC SQL <gömülü SQL ifadesi> END_EXEC

Scroll to Top