Node.JS

NodeJS Sqlite Select Sorgusu

Herkese merhaba, NodeJS derslerimize kaldığımız yerden devam ediyoruz. Bu dersimizde NodeJS ile Sqlite veritabanından select sorgusu yapmayı anlatacağım. Hadi başlayalım !

Bir önceki dersimizde Sqlite veritabanına bağlantı yapmayı anlatmıştım ve şimdi de veritabanından select sorgusu yapmayı anlatacağım.
Tabi bunun için öncelikle bir tane NodeJS projesi oluşturmamız gerekiyor.
Proje oluşturmak için ise bir tane klasör oluşturup terminal (Windows için CMD) ile o klasöre geçiş yaparak
npm init --yes
komutunu girmemiz yetiyor. Ardından veritabanı bağlantısı için gerekli olan Sqlite3 paketini kuralım. Bunun için yine terminalden
npm install sqlite3
komutunu girelim ve paketin kurulmasının ardından index.js dosyamızı açarak öncelikle sqlite3 paketini içeri aktaralım ve veritabanı bağlantımızı yapalım.
Sqlite veritabanına bağlantı yapmayı anlattığım yazımda (
Yazı için buraya tıklayın) anlattığım için burada hızlı hızlı geçeceğim.
const sqlite = require('sqlite3');
const baglanti = new sqlite3.Database('c:/users/kullanıcı/desktop/veritabanı.db').verbose();
Veritabanı bağlantımızı yaptık ve artık sorgu çalıştırmaya hazırız.
NodeJS ile Sqlite veritabanında select ve update, delete, insert sorguları olmak üzere 2 farklı kullanım yapılmakta. Bu yazımda select sorgusunu anlatacağım. Burada da 2 farklı yöntemimiz var. Yani çoklu veri çekeceksek farklı, gelen verilerden ilkini çekeceksek farklı fonksiyon kullanacağız.
Gelen veri dizi yapısında olduğu için elbette çoklu veri çekip dizinin ilk elemanını alabiliriz fakat Sqlite paketi geliştiricileri sağolsunlar bunu bizim için ayırmış 🙂
Örneğin veritabanı içerisinde kullanıcılar adında bir tablomuz ve bu tablo içerisinde de integer tipte kullaniciID, varchar tipte kullaniciAdi, varchar tipte sifre ve bool tipte yetki sütunları olsun. Örneklerimizi bu tablo üzerinde yapalım.

Çoklu Veri Çekme
NodeJS ile Sqlite veritabanından çoklu veri çekmek için all() fonksiyonunu kullanıyoruz. Bu fonksiyon string tipte sql sorgusu, dizi tipinde sql sorgusuna eklenecek parametreler ve ilki error, ikinciside gelen verileri tutan dizi olmak üzere 2 parametresi olan callback fonksiyon olmak üzere toplam 3 parametre almakta fakat sql sorgusuna parametre eklemeyeceksek ikinci parametre olan diziyi göndermeyebiliriz.
Örneğin, hiçbir filtreleme yapmadan tüm veriyi çekeceksek yada yapacağımız filtreyi dışarıdan almayacak ve biz biliyorsak sorgumuzda parametre göndermeyeceğiz demektir ve bu sebeple ikinci all() fonksiyonunun ikinci parametresini göndermeden 2 parametreli olarak kullanabiliriz.
Fakat kullanıcıya göre filtreleme yapacak veya filtreyi dışarıdan alacaksak bu parametreleri all() fonksiyonuna ikinci parametre olarak dizi şeklinde göndermemiz gerekiyor.
Aslında filtreleme işlemini doğrudan sql sorgusu içerisine de yazabiliriz fakat güvenlik açısından bu sakıncalı bir durum, çünkü sql injection zaafiyetine davetiye çıkarmış oluruz. Bu yüzden filtreleme yapacaksak filtre parametrelerini ayrıca parametre olarak göndermemiz daha güvenli olacaktır.

callback fonksiyonundaki error parametresi sql sorgusunda oluşabilecek hataları tutar. Yani sql sorgumuzda bir hata varsa error parametresine yüklenecektir.
Sql sorgusunda hata olmaması durumunda ise error parametresi boş kalacak ve callback fonksiyonunun ikinci parametresine sorgu sonucunda gelecek veriler doldurulacaktır.
Bu kadar teorik bilgiden sonra biraz pratik yapalım. Öncelikle doğrudan tüm kullanıcıları hiçbir filtreleme yapmadan çekelim. Ardından yetkisi 1 olan verileri çekelim (yetki 1 ise kullanıcı yönetici, 0 ise normal kullanıcı anlamına gelsin). Son olarakta kullanıcının kullanıcı adına göre filtreleme yapalım.
Yazmamız gereken kodu şöyle bırakalım;
sqlite.all('select * from kullanicilar', (error, tumKullanicilar) => {
    if(error)
        throw error;
    tumKullanicilar.forEach(kullanici => {
        console.log(`Kullanıcı Adı: ${kullanici.kullaniciAdi}, Şifre: ${kullanici.sifre}`);
    });
});
sqlite.all('select * from kullanicilar where yetki=1', (error, yetki1Kullanicilar) => {
    if(error)
        throw error;
    yetki1Kullanicilar.forEach(kullanici => {
        console.log(`Kullanıcı Adı: ${kullanici.kullaniciAdi}, Şifre: ${kullanici.sifre}`);
    });
});
var kullaniciAdi = 'suforce';
sqlite.all('select * from kullanicilar where kullaniciAdi=?', [kullaniciAdi], (error, kullanicilar) => {
    if(error)
        throw error;
    kullanicilar.forEach(kullanici => {
        console.log(`Kullanıcı Adı: ${kullanici.kullaniciAdi}, Şifre: ${kullanici.sifre}`);
    });
});
Yazdığımız kodlara şöyle bir göz atarsak forEach döngülerine kadar zaten söylemiştim, forEach fonksiyonu (yada döngüsü) ile gelen veriler dizi şeklinde olduğu için döngü ile teker teker dolaşarak her veri üzerinde işlem yapabiliriz. Ben burada konsol ekranına yazdırdım fakat siz elbette istediğiniz işlemi yapabilirsiniz 🙂
Evet çoklu veri çekme böyleydi, şimdi de gelen verilerin ilkini almayı anlatalım.

Verilerin İlkini Çekme
Veritabanına gönderdiğiniz sorgu sonucunda tek sonuç geliyorsa doğrudan o veriyi, çoklu veri geliyorsa da verilerin ilkini alır ve geri döndürecektir.
Yine çoklu veri çekme gibi yapıyoruz fakat all() metodu yerine get() metodunu kullanıyoruz ve gelen veri 1 tane olduğu için doğrudan döngü ile işlem yapamayacağız.
Çoklu veri çekmek için yazdığım örnek kodları tekli veri çekme içinde yazalım.
sqlite.get('select * from kullanicilar', (error, kullanici) => {
    if(error)
        throw error;
    console.log(`Kullanıcı Adı: ${kullanici.kullaniciAdi}, Şifre: ${kullanici.sifre}`);
});
sqlite.get('select * from kullanici where yetki=1', (error, kullanici) => {
    if(error)
        throw error;
    console.log(`Kullanıcı Adı: ${kullanici.kullaniciAdi}, Şifre: ${kullanici.sifre}`);
});
var kullaniciAdi = 'suforce';
sqlite.get('select * from kullanicilar where kullaniciAdi=?', [kullaniciAdi], (error, kullanici) => {
    if(error)
        throw error;
    console.log(`Kullanıcı Adı: ${kullanici.kullaniciAdi}, Şifre: ${kullanici.sifre}`);
});
Evet NodeJS ile Sqlite veritabanında select sorgusu çalıştırma işlemi bu kadar ve basit 🙂
Tüm NodeJS derslerimize buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.
Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu