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 !

NodeJS Projesi Oluşturma

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.

sqlite3 Paketini Projeye Ekleme

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 Bağlantısı Yapma

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.

Veri Çekme

Ç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.

Örnek Kod

Yazmamız gereken kodu şöyle bırakalım;

sqlite.all('select * from kullanicilar', (error, tumKullanicilar) => {
    if (error)
        throw error;
    tumKullanicilar.forEach(kullanici => {
        console.log(<code>Kullanıcı Adı: ${kullanici.kullaniciAdi}, Şifre: ${kullanici.sifre}</code>);
    });
});
sqlite.all('select * from kullanicilar where yetki=1', (error, yetki1Kullanicilar) => {
    if (error)
        throw error;
    yetki1Kullanicilar.forEach(kullanici => {
        console.log(<code>Kullanıcı Adı: ${kullanici.kullaniciAdi}, Şifre: ${kullanici.sifre}</code>);
    });
});
var kullaniciAdi = 'suforce';
sqlite.all('select * from kullanicilar where kullaniciAdi=?', [kullaniciAdi], (error, kullanicilar) => {
    if (error)
        throw error;
    kullanicilar.forEach(kullanici => {
        console.log(<code>Kullanıcı Adı: ${kullanici.kullaniciAdi}, Şifre: ${kullanici.sifre}</code>);
    });
});

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.

Örnek Kod

Ç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(<code>Kullanıcı Adı: ${kullanici.kullaniciAdi}, Şifre: ${kullanici.sifre}</code>);
});
sqlite.get('select * from kullanici where yetki=1', (error, kullanici) => {
    if (error)
        throw error;
    console.log(<code>Kullanıcı Adı: ${kullanici.kullaniciAdi}, Şifre: ${kullanici.sifre}</code>);
});
var kullaniciAdi = 'suforce';
sqlite.get('select * from kullanicilar where kullaniciAdi=?', [kullaniciAdi], (error, kullanici) => {
    if (error)
        throw error;
    console.log(<code>Kullanıcı Adı: ${kullanici.kullaniciAdi}, Şifre: ${kullanici.sifre}</code>);
});

Evet NodeJS ile Sqlite veritabanında select sorgusu çalıştırma işlemi bu kadar ve basit 🙂

Evet bu yazımızda sona erdi. Tüm NodeJS yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu