Merhaba, bu yazımda bir dönem veritabanı işlemlerinde bana zorluk çıkaran özel karakter probleminden bahsedeceğim.

Öncelikle problemden başlayalım. SQLite veritabanınıza kaydetmek istediğiniz bir veri ve bu verinin içerisinde tırnak gibi bir özel karakter olduğunu düşünelim. Böyle bir durumda veri içerisindeki tırnak ile sorguya ait tırnak karışacaktır. Örnek verecek olursak:

"DELETE FROM `TABLE_NAME` WHERE COLUMN_NAME='Gökhan'ın yazısı.';"

Fark ettiğiniz gibi sorgumuzda column name kısmından sonra tırnaklarda bir karışıklık oluyor. Bu durumda aşağıdaki gibi bir hata ile karşılaşırız.

android.database.sqlite.SQLiteException: near "n": syntax error (code 1): ,while compiling:
"DELETE FROM `TABLE_NAME` WHERE COLUMN_NAME='Gökhan'ın yazısı';"

Ben bu problem ile karşılaştığımda aklıma ilk gelen çözüm string replace yapmaktı. Fakat bu sorun sadece tırnak ile bitmiyor. Sadece tırnağın bile değişik türleri oluyor sorgudaki normal tırnak ve yatık tırnak gibi.

Bu probleme çözüm ararken bu tür sorunlar için bir database aracı olduğunu gördüm DatabaseUtils.sqlEscapeString. sqlEscapeString verimizin sorgu ile karışmasını önlüyor. Yukarıda verdiğimiz örnek üzerinden gidecek olursak.

"DELETE FROM `TABLE_NAME` WHERE COLUMN_NAME="+DatabaseUtils.sqlEscapeString(Gökhan'ın yazısı.)+";"

sqlEscapeString adından da anlaşılacağı gibi veriniz içerisinde bulunan özel karakterlerin sorgudan kaçmasını sağlıyor. Kullanımı gayet basit bu araç ile özel karakter problemi yaşamaktan kurtulmuş olursunuz.

Bu yazı yorumlara kapalı.