Bir uygulamada login işlemi yaparken bir durumda giriş ekranında kullanıcıdan alınan username’i veritabanında aratırken sorun yaşamıştım. Bunun önüne her ikisini de uppercase yaparak geçmiştim. Ama gördük ki bu da başka sıkıntılara yol açtı.
Peki bu sıkıntı neydi? SQL Serverların locale’i Türkçe’ydi ve veritabanından kayıt sorgularken upper metodunu kullanırsak şöyle bir sonuç alıyoruz.
|
1 |
select upper(LOGINID) from FNUSER where LOGINID = 'ali' |
Bunun sonucu ALİ olarak dönecektir. İlk başta garip gelebilir ama locale Türkçe olduğu için olması gereken sonuç bu.
Eğer bu kullanımı yapacaksak haliyle işin java tarafında da şu şekilde bir kullanım gerekecektir.
|
1 2 3 |
String userName = "ali";
String loginID = userName.toUpperCase(); |
Bu işlemin sonucunda ise loginID ALI olarak dönecektir. Neden ALİ değil de ALI? Çünkü herhangi bir locale vermedik. İstediğimiz locale’de toUpperCase metoduna işlem yaptırabilmemiz için metodun içine istediğimiz locale’i vermemiz gerekecektir.
java.util.Locale içerisinde Türkçe locale yok, napacağız?
|
1 2 3 4 5 |
Locale trLoc = new Locale("tr", "TR");
String userName = "ali";
String loginID = userName.toUpperCase(trLoc); |
Yukarıdaki gibi bir Türkçe locale yaratıp, toUpperCase içine bu locale’i verdim. Bu işlemden sonra loginID’miz artık ALİ olarak basılacaktır.
Sonuç olarak; veritabanı locale’imiz Türkçe ise java kısmında karşılaştırma yaparken toUpperCase metodunu kullanacaksak içine Türkçe locale vermemiz gerekecektir.