Merhaba. Bu yazımda, deneyenlerin bazılarının hata aldığını söylediği veritabanı kullanımını tekrar anlatacağım ve SQLite kullanımına da değineceğim.
Ekran Dizaynı ve Tool İsimledirmeleri
Proje oluşturma adımlarını atlıyorum. Uygulama tam olarak şöyle bir şey yapacak. Bir araba için model, fiyat gibi temel bilgiler girilecek kaydedilecek ve alt kısımda kayıtlı araçlar görüntülenecek.
Projenizde ilk olarak strings.xml dosyanızı açın. Buraya, sayfamızda kullanacağımız tool’ların isimlendirmelerini yazacağız.
Diyelim ki bir buton, textview gibi şeyler ekledik. Bunlara doğrudan Properties kısmından isim vermeyin. İlk olarak bu strings.xml dosyasına gelin ve burda Key-Value şeklinde isimler verin. Yani bir anahtar ve onun karşılığı.
Burada name kısmına bir nevi id değeri yazdık. İçerisine de bunun karşılığı olan String’i yazdık.
1 numaralı alanda textview’lar ve buton için değerleri oluşturduk. Buton için olan “kaydetTxt” dir. Bunu “kaydetBtn” olarak değiştirin.
2 numaralı alanda kayıtların gösterileceği textview için bir alan oluşturduk.
3 numaralı alanda ise 1 numaralı alandaki textview’ların karşısında olacak edittext’ler için değerler oluşturduk. Bu edittext’lere bilgileri gireceğiz.
Her adımdan sonra ctrl+s ile sayfayı kaydedin ki başka sayfada bu değerleri kullanabilesiniz.
Şimdi activity_main.xml sayfasına gelin ve sayfanıza aşağıdaki gibi textview, buton, edittext gibi şeyler ekleyin.
Burada biz bir araç için bilgiler gireceğiz. Kaydet butonuna bastıkça bu değerler veritabanına eklenecek ve her basışta alt kısımda da kayıtlı araçlar gösterilecek.
Şimdi örnek olarak Marka textview’ının üzerine tıklayın ve sağ tarafta Properties-Text alanının yanındaki küçük … butonuna basın ve bu textview’a ait id değerini seçin. Bu işlemi, ekrandaki tüm toollar için yapın. Yani şu şekilde :
Burada seçtiğimiz değerler, strings.xml dosyasında oluşturduğumuz değerlerdir. Karşılığında ise >< tagları arasında yazdığımız değerler gelir.
Her biri için tek tek yaptıktan sonra ekrandaki sarı ünlemlerin gittiğini göreceksiniz. Yani demem o ki bir butona tıklayıp sağ taraftan ya da sayfanın xml dosyasından adını değiştirmeyin ve bu şekilde yapmaya kendinizi alıştırın.
Bu arada properties kısmını bulamadıysanız Window-ShowView-Other kısmında Properties yazın ve Eclipse ekranınıza getirin. Bu işlemlerden sonra sayfanız aşağıdaki gibi tertemiz olacaktır.
En alttaki textview kayboldu çünkü strings.xml dosyasında onun karşılığını boş vermiştik.
Veritabanı Oluşturma
src klasörüne sağ tıklayıp new-class diyerek “Veritabani” adında bir sınıf oluşturun. Sınıfınızı aşağıdaki gibi düzenleyin.
Burada altını çizdi çünkü paketi import etmedik. CTRL+SHIFT+O tuşlarına basın ya da imleci uyarının üzerinde bekleterek import deyin ve ekleyin. Görüntü aşağıdaki gibi olacaktır. Daha sonra aşağıdaki gibi bu sefer “Veritabani” sınıf adında hata verecektir.
Burada da şunu diyor. Sen bu sınıfı extends (kalıtım) ettin ama SQLiteOpenHelper sınıfını kullanacaksan yapıcılarını(CONSTUCTOR) eklemen gerekiyor. Şimdi bu “Veritabanı” sınıfımızın üstünde fareyi beklettikten sonra karşımıza gelen ilk seçeneğe tıklayın.
Tıkladıktan sonra son görünüm aşağıdaki gibi olacaktır.
Bunları şunun için anlatıyorum. Ben size doğrudan sınıfın bitmiş halini verirsem yazarak zaman kaybetmeyin ve olayın nasıl olduğunu anlayın. Ayrıca burda bir sürü büyük küçük harf var tek tek uğraşmayın.
Bakın yine hata verdi. Şimdi yine hatanın üzerine gelin ve “Add unimplemented method” seçeneğine tıklayın.
Burda da şunu demek istiyor. Bu SQLiteOpenHelper sınıfını kullanacaksan bazı metodlarını implemente etmen gerekiyor. Bu SQLiteOpenHelper sınıfı bunu zorunlu koşmuş. Beni kullanan bunu yapmak zorundadır diye. Son görünüm şöyle olacaktır.
Şimdi bu alanları dolduracağız. Doldurduktan sonra neyin ne işe yaradığını tekrar anlatmayacağım. Fakat kısaca değineceğim. Daha önceki veritabanı derslerinden bunların ne demek olduğunu öğrenebilirsiniz. Bu alanları doldurduktan sonra da görünüm şu şekilde olur.
Burada kısaca “araclar” adında bir veritabanı, “aracbilgileri” adından bir tablo oluşturduk ve tablonun alanlarını girdik. Veritabanı oluşturma bitti şimdi asıl kodlamaya geçelim.
Tool’ları Id Değerleri ile Eşleştirme
Ekranda tanımladığımız buton, texview gibi toollar için id değerleri ile eşleştirme yapacağız. MainActivity.java sınıfına gelin ve aşağıdaki kodları yazın.
Eğer altı çizilen bir şey olursa import etmeniz gerektiğindendir. CTRL+SHIFT+O diyerek ekleyebilirsiniz.
Burada R.id.editText1 dedik. Çünkü bu markaEdt’nin sayfadaki karşılığı budur. Bunu şurdan öğrenebilirsiniz.
Şimdi butona tıklandığında yapılacakları yazalım. En önemli kısım bu zaten.
Kaydet Butonu Altında Kodların Yazılması
Butonumuzun click olayını yazacağız şimdi. Bunu da adım adım anlatıyorum çünkü tek tek elle yazmayın. MainActivity.java sınıfını açın ve onCreate() metodunun içine şu kod satırını yazın.
Daha sonra parantez içine şunları yazın.
Bunu yazdıktan sonra CTRL ye basını tutarak BOŞLUK (space) tuşuna basın ve karşınıza ilk gelen onClickListener seçeneğine basın. Kendisi tamamlayacaktır. CTRL+SPACE kombinasyonu otomatik tamamlama yapar zamandan kazandırır.
Tamamladıktan sonra son görünüm şu şekilde olur :
Burada ok ile gösterdiğim yere noktalı virgül koyun yoksa hata verir.
Şimdi tıklanma olayını hazırladık. Tıklanınca olacak şeyleri şimdi burada yazalım. Yazdıktan sonra kodların son görünümü şu şekilde olur.
Butona tıklanınca kayitEkle() metoduna gidecek.
Şimdi kayitEkle() metodunu dolduralım.
Yukarıda db bağlantılarını kapatmayı UNUTMAYIN. (ben unuttum)
Şimdi uygulamamızı çalıştıralım ve bir deneyelim.
Ekran Çıktıları
Eğer uygulamanız hata verirse konsola bakın. Eğer bu hata time out hatası ise aşağıdaki işlemleri yapın
Window sekmesinden Preferences seçeneğine tıklayın ve aşağıdaki gibi 5000 değerini 15000 yapın. Uygulama timeout hatası verebilir. Ayrıca doğru çalıştığını düşündüğünüz bir uygulama hata verirse de burada göz atın.
SQLite Professional ile Veritabanındaki Bilgilerin Gösterilmesi
Veritabanına eklediğimiz değerleri şimdi SQLite programı ile görelim. Ben SQLite Professional programını indirdim. Şimdi ilk olarak veritabanımızı masaüstüne çıkarmamız gerekiyor. Bunun için şunları yapın.
Uygulamanızı çalıştırın. Yani emülator çalışsın. Bu olmadan olmaz. Tamamen çalıştırın ve projenizi görüntüleyin. Daha sonra,
Eclipse’de sağ üst köşedeki perspektif ekleme butonuna basalım ve karşımıza gelen ekrandan DDMS yi seçelim
Daha sonra aşağıdaki gibi solda emülatör gelecektir. Sağda da üstteki sekmeden File Exporer seçeneğini seçin. Karşınıza şöyle bir ekran gelir.
Buradan sağdaki alandan data>data>proje adı seçeneklerine tıklayarak veritabanınızın olduğu klasöre kadar ilerleyin. Son ekran şöyle olacaktır.
Bu “araclar” isimli veritabanına tıklayın ve sağ üstteki sol ok butonuna basın (pull a file from the device). Sonra veritabanını masaüstüne kaydedin. Eğer kaydetmezse Eclipse’yi ve emülatörü kapatın sonra ikisini tekrar çalıştırıp deneyin. Şimdi SQLite programını açın.
Open Database dedikten sonra masaüstündeki veritabanını seçin.
Aşağıdaki resimdeki gibi sekmelere gidin ve tablonuzu açın.
SQL sekmesine gelin ve şimdi kayıtları getiren sorguyu yazalım ve Execute SQL butonuna basalım.
Kayıtlar aşağıdaki gibi listelendi.
Bir sonraki derslerde görüşmek üzere….
mehmet bey. çok teşekkürler.
Üstadım, emek vermişsiniz, elinize, kolunuza, beyninize sağlık. Yeni başladığım ve yabancı olduğum bu konuda, yine yabancı bir dille anlatılan kaynaklarda bocalayıp dururken, can simidi gibi oldu açıklamalarınız. Yalın ve anlaşılır bu paylaşımınız için teşekkür ederim.
Bu derdi ben de zamanında yaşadığım için biliyorum neler hissettiğinizi. Rica ederim kolay gelsin.
Anlatımınız gerçekten çok güzel emek verip bu yazıyı yazdığınız için çok teşekkür ederim. Ancak yazdıklarınızı denemek istediğimde projede gözüken bir hata olmamasına rağmen sanal cihazda denemek istediğimde beklenmedik bir şekilde kapandı gibilerinden bir yazı çıkıyor ve kapanıyor sizce sebebi ne olabilir?
Merhaba. Debug yapın o şekilde görebilirsiniz. Veritabanı sütun isimlerinde ya da tablo isminde bir harf bile yanlış olduğunda hata olmamasına rağmen emulator kapanır. Setcontentview metodundan sonra debug koyun ve f6 ile ilerleyin. Hangi satırda hata fırlatıyor bakın
hocam öncelikle emkleriniz çok teşekkür ederim ben veritabanı oluşturamırum kodların aynısını yazdığım halde unfortunately project has stoppeed mesajı veriyor
Merhaba. Hocam ufak bir noktayı kaçırıyor olabilirsiniz. Ben yine de tekrar inceleyecegim
mrb hocam sorunu hallettim ama oluşturduğum veritabanını file explorer masa üstüne kaydettim kaydettiğim dosyadan veritabanını görebilmem için sqlitemanager kurmam gerekiyo mu acaba
Evet kurmanız gerek. Sorunu nasıl giderdiğinizi de yazarsanız başkaları da bilgilenmiş olur
türkçe karakter hatası sanırım hocam veritabanı ismini yazarken hocam birden fazla tablo oluşturmak istersek nasıl yazarız mesela hem kayı hemde bilgiler adında 2 tablo oluşturmak istersek
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(“CREATE TABLE bilgiler(ad TEXT,soyad TEXT);”);
db.execSQL(“CREATE TABLE bilgiler(ad TEXT,soyad TEXT);”);
}
bu şekilde oluşturabilirmiyiz acaba
Hiç denemedim ama olması gerek. Tablo oluşturma işleminin olduğu heryerde kopyalama işlemini yapın
unfortunately project has stoppeed hatasıs alıyorsanız yazım yanlışıdır kodlarınızı tekrar gozden geçirmeniz gerekir.
programın hata vermesinin nedeni,en sonda kayıt ekle metodunda,database açık kalıyor,kapatmanız gerekiyor.
sondaki satıra
db.insertOrThrow(“aracbilgileri”, null, cv1);
yazan kısmını
db.insert(“aracbilgileri”, null, cv1);
db.close();
olarak düzeltirseniz sorun çölüzecektir.
merhaba bende bi uygulama yapıyorm veritabanını oluşturdm ancak çalıştırdığım zaman file explorer kısmında veritabanını göremiyorm neyi yanlış yapmış olabilirim?
File explorer de data klasörü yok mu ? Emulator acıkken yapacaksınız ve emulatorun uzerıne tıklayacaksınız DDMS de
data klasöru var ama lib dosyası çıkıyor sqliteopenhelper sınıfı eclipse in onu database olarak yorumlamasına yetmiyor mu anlamadım.
ne demek istediğinizi anlamadım. Data klasörünün içinde veritabanının olmadığına dair o ekranın resmini çekip mail olarak atın.
mail attım ilginiz için teşekkür ederim
eline sağlık hocam bi sorum olacak
finally
{
v1.close();
}
kaydete bastığımda en sondaki } işareti Debug Current Instruction Pointer diye hata veriyor
hocam eğer kodu çalıştırmadan önce hata vermiyorsa sorun değil. Uygulama çalışmıyor mu ?
Hocam değerli anlatımınız için çok teşekkürler . Bir sorum olacaktı ,
yukarıda örnekte yaptığınız kayıtlara göre arama yapıp bulunan değeri ayrı bir sayfada göstermek istiyorum. Örneğin marka model textview’lerine OPEL ASTRA
yazıp arama tuşuna basınca yıl fiyat ve yakıt bilgilerini diğer sayfada görmek istiyorum .Bu konuda yardımcı olabilir misiniz?
Bundle ile diğer sayfaya taşıyın bilgileri ve orada kullanın. Derslerimde mevcut
Gerçekten çok güzel anlatmışsınız Teşekkürler. Elinize sağlık
Hocam öncelikle emeğinize sonsuz teşekkürler. Ancak bende data dosyasını file explorer da buluyorum fakat acilmiyor. icine giremiyorum. Ama ben emülator olarak kendi telefonumu kullanıyorum acaba ondan dolayı olabilir mi diye düşünüyorum. Programda hiç bir sıkıntı yok açılıyor ama data dosyalarına girip projemi bulamıyorum.Yardımcı olursanız çok teşekkür ederim.
kendi telefonunuzda açılmaz.
Bir emülator kurdum ve düzeldim hocam teşekkür ederim. Fakat şimdi başka bir sıkıntıyla karşılaştım . Projemi buluyorum veritabanı altında araclar sayfasını da bulup masa üstüne atıyorum. SQLite programımızdan open database dedikten sonra masa ustundeki araclar sayfamızı görmüyor. Ne yapabilirim acaba?
onuda hallettim . Aynı sorunu yaşayan arkadaslar olursa diye onuda yazayım. masaustundeki dosyayı birlikte aç diyip SQLite programını seçelim. Hocam cok teşekkürler
Open database dedikten sonra altta tüm dosyaları seçin.
Merhabalar. Anlatımınız için çok teşekkürler. Benim elimde hazır oluşturulmuş bir sqlite veritabanı dosyası var. Ben projemde yeni veritabanı oluşturmak istemiyorum. Mevcut elimdeki veritabanını kullanmak istiyorum. Yabancı kaynaklarda da bulamadım. Nasıl yapabilirim yardımcı olabilirmisiniz.
Veritabanı dosyasını assets klasörü içine atın oradan okuyun. Naısl okumanız gerektiğini ise google’a ingilizce yazarak araştırın
Merhaba hocam öncelikle çok teşşekkür etmek istiyorum yazınız için. Ama bunları uygularken bir hata alıyorum. Hatayı belirtmiş olduğunuz bu işlemi “SQL sekmesine gelin ve şimdi kayıtları getiren sorguyu yazalım ve Execute SQL butonuna basalım.” yapınca alıyorum.
HATA
no such table:aracbilgileri
SQL Statement:
select*fromaracbilgileri
Sorgunuz nedir ?
Hocam saygılar. Acaba Veritabanımdaki bilgileri arrayliste nasıl aktaracagım ile ilgili bir ders verebilir misiniz?
Hocam merhabalar. Benim şöyle bir sorum olacak Ben kodları eksiksiz olarak yazdım fakat “unfortunately project has stopped” hatası alıyorum. Yazımı baştan sona inceledim imla hatası yok ve Program v1.close(); kodunun yazılı olduğu satırı hatalı olarak gösteriyor. Yardımcı olursanız çok sevinirim. İyi Çalışmalar.
Merhabaç Birçok sebepten dolayı hata vermiş olabilir. Debug modda çalıştırın ve hangi satırda hata alıyorsunuz onu yazın
Sorunu düzelttim hocam. Teşekkür ederim.
Nasıl düzelttiğinizi de yazar mısınız diğer arkadaşlar da bilgilensin
Mehmet Bey merhaba, Android geliştirmede çok yeniyim. Bir çok şeyi aştım ama şu SQLite veri tabanını kullanmakta takıldım kaldım. Verdiğiniz örneği çalıştırma aşamasına kadar getirdim fakat bazı yorumcuların da belirttiği gibi uygulama emülatörde açılmadan kapanıyor. yukarıda belirttiğiniz gibi debug modunda çalıştırdığımda ise herhangi bir hata vermiyor gibi. Sorun ne olabilir? Artık şu SQLite kullanımını anlamak istiyorum.
Merhaba. Kodda sorun yok çalışması gerek. Bir harften bile uygulamanız hata vermiş olabilir. Tekrar kontrol edin. Yorumlarda bazı hataların çözümü de var onlara da bakın. Ben de anlamayanlar için anlattım bu dersi
Yorumlardaki çözümleri de yaptım ama maalesef. Yine de tekrar kontrol edeyim. Bu arada gerçekten örnek anlatımınızdaki açıklık ve görsel destek çok iyi, teşekkür ederim.
Hocam anlatım için teşekkürler, ben ” R cannot be resolved to a variable ” bu hatayı almaktayım, çözüm için hangi yolu izlemeliyim ?
İmport kısmından bunu kaldırın. sonra projeyi clean edin.
bende bu hatayı alıyorum açıklamanızı anlayamadım hocam ne yapmak lazım tam olarak ?
Yorumlarda hatayı çözenler var. Bir bakın eğer olmazsa ben de bir bakayım. Kullandığım servisler değişmiş o yüzden hata alınıyor sanırım
merhaba, sizin anlatımınızdan faydalanarak bir uygulama yapmaya çalıştım. kodda herhangi bir hata yok ama ddms altında data altında sadece lib dosyası oluşuyor. database dosyası oluşmuyor. acaba hatam nerede olabilir.
sorunu çözdüm. yazım hatasından kaynaklı. VT adını TR yazım hatası
Merhaba Mehmet Bey
Hazır içinde veri olan SQLite veri tabanını kendi programımıza nasıl dahil edebiliriz? Bunun hakkında internette çok fazla bilgi bulamadım. Bu konuda sizden yardım bekliyorum. İyi çalışmalar.
Merhaba,
Bu derste, bunu nasıl yapacağınız anlatıldı aslında. Hangi klasöre atacağınız nasıl okuma yapacağınız vs.
merhaba yoruncularında dediği gibi elimde olan bir veritabanı dosyasını androide nasıl import edebilirim
veritabanı kendim oluşturabiliyorum ancak tek tek kayıt girmek istemiyorum bu yüzden
dediğim gibi bişey varsa bilgilendirirseniz sevinirim.
ayrıca emuletör çalıştığı anda hata alan arkadaşların “v1=new VeriTabani(this);” gibi bir satırı eklememiş olabilirler
Merhaba. Import için kopyala yapıştır yeterlidir. Veritabanının olduğu yere kopyalayabilirsiniz
Selamlar,
Android programlamaya yeni başladım.Veritabanı ile ilgili olan bu anlatımınızı okudum.Benim bir sorum olacaktı. Emülatör kullanmadan yani gerçek cihaz ile uygulamayı test ediyorum.Misal en basit haliyle ekrandaki textboxtan veriyi alıp SQLite a kaydetmeyi denedim.Fakat veritabanını cihazda mı yoksa pc ye mi kaydettiğini anlayamadım.Eclipse da File explorer ile bakınca /data klasörü altında hiçbirşey yok.Bu konuda yardımcı olur musunuz.
Merhaba. Bu şekilde yaparsanız bilgisayara kaydetmez. Telefona kaydeder. Dolayısıyla da bilgisayarda yani eclipse de boş gelmesi doğaldır
İyi günler
Öncelikle böyle nitelikli bir paylaşımda bulunduğunuz için teşekkür ederim. Ben KTÜ BÖTEB alanında yükseklisans yapmaktayım. Şuanda tez aşamasındayım. Androidte bir forum oluşturup öğrencilerin burdan konu ile ilgili tartışmalarını sağlamaya çalışacağım. Size birkaç sorum olacaktı yardımcı olursanız çok sevinirim. Burada oluşturduğumuz veritabanı tamamen kullanıcının telefonunda mı kalacak? Çünkü benim yapmaya çalıştığım çalışmada öğrencilerin forumdan yazdıklarını güncel olarak herkes görebilmeli ve ben hepsine ortak bir veritabanından erişebilmeliyim ki analizini yapabileyim. Sizin bu derste yapmış olduğunuz çalışma veritabanı manasında benim ihtiyacımı karşılar mı? karşılamıyorsa önerebileceğiniz bir yöntem var mı?
Merhaba,
Tabiki sadece telefonun veritabanında olmayacak. Bir sunucu alın ve bilgileri bu sunucu üzerinde tutun. Dolayısıyla bu ders sizin işinizi görmeyecek çünkü uzak sunucuya kayıt eklemek için farklı bağlantı yöntemlerini kullanmanız gerekecek.
İyi günler.
İlgilendiğiniz için teşekkür ederim 🙂
Hocam bu içerik veritabanı içeriği ile aynı.
Merhabalar hocam başka cihaza aktarılan apk dosyasının veritabanı dosyasına nasıl ulaşabilirm
Merhaba. Maalesef ulaşamazsınız.