MS SQL Server’a JDBC İle Erişim
Microsoft’un SQL Server’ı, Java ile geliştirme yapanların en çok kullandıkları ya da tercih ettikleri veri tabanı ürünü değildir ama Javacılar, ihtiyaçlara göre zaman zaman Microsoft’un SQL Server’ını kullanmak durumunda olabilirler. Ben de daha önce SQL Server’ı kullanmıştım, hatta 90’lı yıllarda önce 6.5 sonra da 7.0 versiyonlarını kullandığımı hatırlıyorum. Bugün de bir vesile ile SQL Server 2008 R2 Express‘i kurdum makinama. Eskiden beri, özellikle de eğitim amaçlı olarak ihtiyacım olduğunda veri tabanına bağlantı sağlayıp sağlayamadığımı kontrol etmek üzere oluşturduğum ve Connection nesnesi üzerinde işlem yalıtım seviyesini (transaction isolation level) yine aynı nesne üzerindeki static final ve int 5 değerden birisi olarak geri döndüren getTransactionIsolation() metodunu çağıran ufak bir JDBC kodum vardır. Bu kodda pek çok farklı veri tabanında belirtilen değeri basan metotlarım vardır. Örneğin makinamdaki Oracle XE için bu metot aşağıdaki gibidir:
public static void connectOracleXE(){ String xeUrl = "jdbc:oracle:thin:@localhost:1521:XE"; try { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection xeConn = DriverManager.getConnection(xeUrl, "username", "password"); System.out.println("Transaction Isolation Level for Oracle XE: " + xeConn.getTransactionIsolation()); } catch (Exception e) { System.out.println("Problem: " + e.getMessage()); e.printStackTrace(); } }
Tabi ki bu kodun Oracle XE’nin varsayılan işlem yalıtım seviyesi olan “2”yi basabilmesi için CLASSPATH’de Oracle XE sürücüsüne ihtiyacımız var.
Benzer şeyi SQL Server için de yapabilmemiz için bu veri tabanı için JDBC sürücüsüne ihtiyacımız var. Microsoft’un SQL Server ailesi için ürettiği JDBC sürücüsüne buradan ulaşabilirsiniz. Bu sürücüyü kurduğunuzda içinden iki tane jar sürücü dosyası çıktığını göreceksiniz. sqljdbc.jar JDBC 3.0 sürücüsü olup JRE 1.6’yı desteklemediğinden büyük bir ihtimalle bir JDBC 4.0 sürücüsü olan sqljdbc4.jar’ı kullanacaksınız.
Bu sürücünün yüklenmesi gereken sınıfı “com.microsoft.sqlserver.jdbc.SQLServerDriver”dır. Ayrıca ayrıntılarına buradan ulaşabileceğiniz, URL gibi bazı bilgilere ihtiyacınız olacaktır. Bu arada makinanıza kurduğunuz SQL Server’e de bazı değişiklikler yapmak gerekecektir. SQL Server’ın 1433 nolu porta gelen her türlü TCP/IP çağrılarına cevap vermesi gibi. Bunun için de burada anlatılanları yapın. Artık aşağıdaki kodu çalıştırıp, “2” cevabını alabilirsiniz:
public static void connectSQLServer(){ String url = "jdbc:sqlserver://localhost\\SQLEXPRESS;databaseName=jpa; user=sa;password=password"; try { DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver()); Connection conn = DriverManager.getConnection(url); System.out.println("Transaction Isolation Level for SQL Server: "+ conn.getTransactionIsolation()); } catch (Exception e) { System.out.println("Problem: " + e.getMessage()); e.printStackTrace(); } }
Yukarıdaki URL için aşağıdaki farklı seçenekleri de kullanabilirsiniz:
String url = “jdbc:sqlserver://localhost\\SQLEXPRESS;databaseName=jpa;
user=sa;password=password”;
String url = “jdbc:sqlserver://localhost;instanceName=SQLEXPRESS;
databaseName=jpa;user=sa;password=password”;
String url = “jdbc:sqlserver://AKINLAPTOP;instanceName=SQLEXPRESS;
databaseName=jpa;user=sa;password=password;”;
// Istenirse varsayılan 1433 nolu port da belirtilebilir
String url = “jdbc:sqlserver://localhost:1433;instanceName=SQLEXPRESS;
databaseName=jpa;user=sa;password=password”;
// ya da aşağıdaki gibi
String url = “jdbc:sqlserver://localhost\\SQLEXPRESS:1433;
user=sa;password=password”;
Toplam görüntülenme sayısı: 4282
Murat GÜZEL
08 Ekim 2010 @ 02:03
Eskiden oledb ile bağlanırken auto translate=false ibaresi ekleyebiliyorduk. Bunu jdbc driver’ ında nasıl yupabiliriz ? Bununla ilgli bir örnek verirseniz sevinirim. Ben biraz bakındım ancak bulamadım.
Akin
09 Ekim 2010 @ 11:34
Merhaba,
MS teknolojilerinde uzman değilim, dolayısıyla da Oledb’de “auto translate=false”‘in ne işe yaradığını bilmiyorum. Kısaca açıklarsanız sorunuza cevap vermeye çalışırım.
Hoşçakalın.
Murat GÜZEL
12 Ekim 2010 @ 06:50
SQL Server da datalar latin1 formatında duruyor diyelim. Yani elimizde türkçe karakterler bozuk görünüyor. Eğerki böyle bir datayı sql server da alırsam “kırmızı” yı (latin1 olarak duran) kirmizi şeklinde translate eder. Eğer ben auto translate=false edersem connectionstring de o zaman “kırmızı” şeklinde doğru bir formatta alabilirim. Umarım anlatabildim.
malik
16 Mayıs 2015 @ 19:25
Ben ilk baglandigimda sacmaluga bak acaba benden baskasi java ile ms sql kullaniyor mudur duye dert yaniyordum ama yalnz olmadgmu gormek guzel
Akin
17 Mayıs 2015 @ 07:41
Muhtemelen Java kullanılan projelerde MS SQL kullanılma oranı bayağı düşüktür diye düşünüyorum.
Teşekkürler.