Kayıt Ol

Giriş

Şifremi Kaybettim

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Giriş

Kayıt Ol

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi adipiscing gravdio, sit amet suscipit risus ultrices eu. Fusce viverra neque at purus laoreet consequa. Vivamus vulputate posuere nisl quis consequat.

Android SQLite Database Kullanımı (select-insert-update-delete)

Merhaba arkadaşlar bu dersimizde Android de SQLite Veritabanı kullanmayı anlatmaya çalışacağım. Hepimizin malumudir ki yapmak istediğimiz yada yaptığımız uygulamalarda bazı verileri saklama ihtiyacı duyarız.Bunun da en güzel yolu elbetteki veritabanıdır.

NOT : Dersi hazırlarken eclipse ile hazırlamıştık. Kaynak kod içinde hem eclipse projesini hemde Android Studio projesini bulabilirsiniz.
Sqlite kullanımı oldukça kolay bir veri tabanı sistemidir. Küçük boyutu ve hızlı yapısı sayesinde mobil cihazlarda kullanımı oldukça yaygındır. Sqlite birçok programlama diliyle birlikte kullanılabilir.
Bu dersimizde ActionBar kullandığım için min sdk versiyonumuzu 11(Android 3.0) seçtik.Eğer ActionBarı API 11 in altında kullanmak isterseniz Support Library indirip projemize dahil ediyoruz. ActionBar konusunu daha sonra detaylıca anlatacağım.
Şimdi sqlite veritabanına geri dönelim. Daha İyi anlamamız için küçük bir uygulama yazdım. Bu uygulamada veritabanında sqlite_database adında bir veritabanı oluşturdum.İçinde kitap_listesi adında bir tablo var. Uygulama içinden bu tabloya kitap ekleyip,kitap silebiliyor ve var olanı kitabı güncelleyebiliyoruz(update).
Şimdi uygulamanın kodlarına geçelim.Öncellikle oluşturuken api 11 muhabbetine dikkat edelim.
sqllitedatabase

Arkadaşlar Kaynak Kodu İndirip uygulamayı çalıştırırsanız anlamanız çok daha kolay olucaktır.

Öncelikle Database Classı inceleyelim.

Şimdide MainActivity Classı inceleyelim ve Database classdaki metodları nasıl kullandığımıza bakalım.

Arkadaşlar gerekli açıklamaları zaten kod üzerinde yaptım. Diğer KitapEkle ve KitapDuzenle classını kaynak kodu indirerek inceleyebilirsiniz. Bu class lardaki gerekli açıklamalarıda kod üzerinnde yaptım.

Burada üzerinde duracağım nokta MainActivity de neden işlemleri onCreate() methodunda yapmadım da onResume() methodunda yaptığım. Arkadaşlar bu durumu şöyle açıklayayım. Elimizde A ve B activity leri var. A activity sinden B activity sine geçiş yaptığımızda eğer A activtysini finish() methodu ile öldürmediysek B activitysinden Back butonu veya ActionBar dan geri gel butonuyla geri geldiğimizde A activty si olduğu gibi durur ve yeniden yaratılmaz. Ama bizim bu uygulamamızda Kitap Listesindeki kitapları silebilir veya değiştirebiliriz. Örneğin uygulamayı ilk actık kitapları listeledik ve KitapDetay classından kitabı sildik.Ama geri MainActivity e geldiğimizde baştan yüklenmiyeceği için kitap duruyor gözükecektir. İşte burda onResume() methodu bizim işimize yarıyor. Bu method bulunduğu class her açıldığında çalışır. İster ilk açılıyor olsun isterse Back butonuyla geri gelinmiş olsun her zaman çalışır.
Evet arkadaşlar bu derste anlatmak istediklerim bu kadar.Oluşturduğumuz bu database verilerini ,yapısını,yada doğru oluşturup oluşturmadığımızı kontrol etmek için bu dersimize göz atınız.Paylaştığım bu derslerin benzerlerinide İos platformu için de yine örnek uygulamalarla anlatmaya çalışacağım. Bir dahaki dersimizde Android de Splash Secreen(Açılış Sayfası) yapımını anlatacağım.Arkadaşlar bu dersle ilgili aklınıza takılan yada anlamadığınız yerleri sorabilirsiniz. Müsait olduğum zamanlar cevaplamaya çalışacağım. O zamana kadar kendinize iyi bakın ve destek için bu dersleri aşağıdaki linklerden paylaşın.

Yazar Hakkında

iOS & Android & Apple Watch Developer, Mobilhanem.com yazarı, Karadeniz Uşağu, Ordu Sevdalısı, Anti Fenerbahçeli, Koyu Galatasaraylı
  • REŞAT

    MERHBA BN SİZİN UYGULAMNIZI İNDİRDİM SQL TABLOLARINI KENDİNİ ME GÖRE DÜZENLEDİM “ÇALIŞMAYI DURDURDU HATASI” ALDIM YARDIMCI OLURSANIZ SEVİNİRİM

    • Taha Kırca

      indirdiğiniz uygulamada mı bu hatayı aldınız yoksa kendiniz tablolar üzerinde oynadıktan sonra mı bu hatayı alıyorsunuz??

  • Akif

    Ben kendime düzenleyim dedim bende durduruldu hatası aldım.

    • Taha Kırca

      Mail atabilirseniz olustrdgnz dosyalari inceleyebilirim.

      • Akif

        Şİmdi öncelikle mail adresinizi nerden alabilirim, Ben kendime göre düzenlediğimde 5 6 tane daha edittext ekledim onları database koydum giriyorum kayıt yap diyorum toast measj ile veritabanına eklendi diyor fakat en baş sayfada bir türlü gelmiyor. Sizin göndirdiğiniz 4 tane database tablosunu kulandığımda baş sayfa isimler geliyor. Tam olarak anlatabildin mi, sizin dışınızda bir edittext daha eklediğim de onu veritabanına kaydetebiliyorum fakat onu nasıl göstereceğim.

        • akif

          Acaba siz bir kitap yilinin altına atıyorum yasi değerini girip onu ekleyebilirmisiniz böyle bende nerelerde değişiklik yaptığınızı anlayabilirim benim gibi muzdarıp olan çok insan vardır. Ayrıca dediğiniz gibi eğer bu dediğime vaktiniz yoksa ben mail adresinizi alıp size projemide gönderebilirm.

          • Taha Kırca

            Büyük ihtimal eklerken sorun oluyor. Ekleyip eklemediğini bir sqlite manager ile yada yada firefoxun sqlite manager eklentisi ile inceleyebilirsiniz.

      • akif

        Herşeyi yaptım hala çözüm bulamadım, bu benim mail adresim sinyor22@gmail.com oraya bir selam yazarsan şu projeyi bir göndereyim bak yetişmesi lazım ve ben daha bu veritabanı sıkıntı çıkartdığından hiçbirşey ekliyemedim.Sana zahmet.

    • Taha Kırca

      Hatalarını yazıorm
      Kitapekle.java 29.satır:
      e4 = (EditText)findViewById(R.id.editText5); // bastaki e4 değil e5 olacak

      Database.java

      onCreate metodunu yanlıs yapmıssın

      @Override
      public void onCreate(SQLiteDatabase db) { // Databesi oluşturuyoruz.Bu methodu biz çağırmıyoruz. Databese de obje oluşturduğumuzda otamatik çağırılıyor.
      String CREATE_TABLE = “CREATE TABLE ” + TABLE_NAME + “(”
      + KITAP_ID + ” INTEGER PRIMARY KEY AUTOINCREMENT,”
      + KITAP_ADI + ” TEXT,”
      + KITAP_YAZARI + ” TEXT,”
      + KITAP_BASIM_YILI + ” TEXT,”
      + KITAP_FIYATI + ” TEXT,”
      + ADSOY+” TEXT”+”)”;
      db.execSQL(CREATE_TABLE);
      }
      Bu sekilde değiştirdim.Hatan ise
      + KITAP_FIYATI + ” TEXT,” burda sondaki virgülü koymamıssın ve

      + ADSOY+” TEXT”+”)”; burdaki TEXT yazısını bosluksuz yazmıssın başında bir boşluk olacak

      • akif

        Çok teşekkür ederim çok yardımcı oldu.

  • Arif Cankaya

    Yazınız için çok teşekkür ederim. Projenizi indirip kendime göre geliştirdim. Tabi hala eksiklerim var ama database yi listview de nasıl listelerim soruma cevap oldu.

  • Arif Cankaya

    Mükerrer kayıt önleme için ne yapabiliriz.?

    • Taha Kırca

      Öncelikle bir önceki yorumunuz için teşekkür ederim. Mükkerrek kayıtı önlemenin yolu yeni kayıt eklerken insert etmeden önce bu isimli kitabı yada unique olarak neyi tutacaksanız select ile kayıt olup olmadını kontrol edebilirsiniz.”Select * From WHERE kitap_adi=’yeni_eklenecek_kitap_adi’ “; gibi bir select yapmak ve gelen sonucu saydırıp 0 dan büyükse insert etmeyip hata verdirebilirsiniz.

      • alper

        kitap adının mükerrerliğini aratmak çok saçma. VEri tabanı tamamaen farklı birşey yazılım yazmaya benzemez. Bir kere otomatik anahtar alan saçmalığı unutulmalı. aynı isimde farklı yazarların yazdığı kitap olabilir. Lütfen veri tabablarında anahtar alanı eğer sayısal ise kendiniz artırın. ISBN ise zaten sıkıntı olmaz

        • Burda amacımız veri tabanı mantığını anlatmak değil .Sqlite kullanım mantığını anlatmak.Kardeşimiz mükerrer kayıtları nasıl önleyebileceğini sormuş bende örnek vermişim ve dikkat ederseniz “unique olarak neyi tutacaksanız select ile kayıt olup olmadını kontrol edebilirsiniz” diye belirtmişim.Siz neden böyle bir yorum yapma gereği duydunuz onu anlamış değilim.Amacınız daha iyi bir çözümse burda verilen emeğe “saçmalık” demeniz bence hiç hoş değil. Bunun dışında veri tabanı ile ilgili sıkıntınız varsa iletişim bölümünden iletişime geçin ben size yardım ederim.

  • joker_

    Son derece sade ve anlaşılır bir tutorial olmuş.Çok işime yaradı,elinize aklınıza sağlık.Teşekkürler.

    • Ben teşekkür ederim.İşinize yaradıysa ne mutlu.

  • Burhan Aksendir

    Hazır bir sql veritabanımız varsa, o zaman nasıl olacak ? Yani veritabanımız uygulama içerisinde gömülü (embed) olacak? Bu durumda sizin bu kodlarınızı nasıl kullanabiliriz ?

    • Burhan Aksendir

      ** Pardon sql değil sqlite demek istedim.

      • Hazır bir sqlite veritabanın varsa onu projeye import edeceksin .Bunu şurdaki dersimde anlatmıştım http://www.mobilhanem.com/android-eclipse-sqlite-plugin-ve-sqlite-database-browser-kullanimi/

        • Kıvanç

          Merhaba Taha bey, anlatımınız benim için çok faydalı oldu, çok teşekkür ederim. Programlama hakkında pek bilgim yok, ancak merakım var. Ben bu örnek üzerinden basit bir telefon rehberi (dahili hatlar vs.) tarzında program oluşturdum. Bu noktada benim problemim şu; database’i SQLite Database Browser ile düzenledim, projemin içinde assetsdatabase klasörüne .db uzantılı olarak attım, ve bunu programın yüklenmesi ile almasını istiyorum. Ancak programatik bir şekilde halihazırda bulunan database ile çalışmasını ve programın güncellemelerinde assets klasöründen almasını nasıl sağlayabilirim, yardımcı olursanız minnettar olurum, tekrar teşekkürler.

  • Ali DEMİR

    Merhaba çok yararlı bir çalışma olmuş. Elinize sağlık. Ben kodları indirmeye çalıştım ancak zip dosyasının hasarlı olduğuna dair bir mesaj alıyorum. Kaynak kodları tekrar yüklemeniz mümkün mü acaba?

  • deneme

  • dursun

    uygulama çok güzel çok faydalı oldu .kendi uygulamama uyarlamaya çalıştım ama durduruldu hatası alıyorum. ilk sayfada (mainactivity) onresume() metodunu /* */ şeklinde iptal ediyorum açılıyor. fakat onresume() metodunu açıyorum ve hata veriyo veritabanında hata olduğunu düşünüyorum. Alan isimlerini ve diğer değişkenleri değiştirmiştim eksiksiz.Yardım edermisiniz lütfen..Şimdiden teşekkür ederim.

    • dursun

      hata düzeldi bir virgul tum kodu hatalı gosterıyor 🙂

    • dursun

      düzeldi 🙂 database.class ‘da oncreate() metodunda hata yapmısım

      public void onCreate(SQLiteDatabase db) {

      String CREATE_TABLE = “CREATE TABLE ” + TABLE_NAME + “(”

      + KAYIT_ID + ” INTEGER PRIMARY KEY AUTOINCREMENT,”

      + KAYIT_ADI + ” TEXT,”

      + KAYIT_YAZI + ” TEXT”

      + “)”;

      db.execSQL(CREATE_TABLE);

      }

      burada ben + KAYIT_YAZI + ” TEXT,” son sutun olmasına ragmen virgul koymusum ve hepsı hatalı oluyo sıldım ve duzeldı 🙂 bu cozumude alttakı sorudan denedım ve duzeldı cok tesekkurlerr:))

      • Cevabı paylaştığın için ben teşekkür ederim .
        Kolay Gelsin..

  • TC Ibrahim Cem Dalboyun

    tşk ederim güzel bir konu olmuş sizin dosyalarda sıkıntı yok denedim çalışıyor sıfırdan kendim yapayım dedim hata veriyor ilk açılışta listelemede sorun var anladığım kadarıyla tek tek inceledim hala hatayı bulamadım bire bir aynı kodlar sadece isimler farklı 🙂

    • TC Ibrahim Cem Dalboyun

      kendi soruma yanıt vereyim 🙂 hatayı buldum

      adapter = new ArrayAdapter(this, R.layout.list_item,R.id.kategori_adi,kat_adlari);

      hatam şu şekildeydi list_item layout unu çağırıp anasayfa.xml sindeki edittext id sini çağırıyormuşum list_item içindeki id yi çağırsam hataya düşmeyekti 🙂

  • dursun

    burada get rowcount() metodunu logın kısmında kullanıcagız yazmısın logın olma olayını anlatan 3-4 tane konu acılmıs acaba hangısı bu konuyla alakalıdır?
    public int getRowCount() {
    // Bu method bu uygulamada kullanılmıyor ama her zaman lazım olabilir.Tablodaki row sayısını geri döner.
    //Login uygulamasında kullanacağız
    String countQuery = “SELECT * FROM ” + TABLE_NAME;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    int rowCount = cursor.getCount();
    db.close();
    cursor.close();
    // return row count
    return rowCount;
    }

      • dursun

        Ya kusura bakma cok rahatsız ettım sızı ama bısey sorabılırmıyım. Ben bu koda logın ekranını yapmak ıstedım.yenıbı verıtabanı olusturdum, logın sayfasından edıttext1 den kullanıcı adını, edıtttext2 den ıse sıfreyı cektmı ve buton1’e tıklandııgnda kontrol ıslemı yaptım ama olmadı kodu soyle kısaca gostereım buyuk bı mantık hatam avr ama bılmıyorum.

        <<BURADA EDİTTEXTLERDEN GELENLERI CEKTIM

        String ad,sifree,k_adi;

        ad=kadi.getText().toString();

        sifree=sifre1.getText().toString();

        <<BURADA ISE VERITANINDAKI ALANLARAL ESLESTIRDIM.

        Database db = new Database(getApplicationContext());

        kayit_liste = db.kayitlar();

        for(int i=0;i<kayit_liste.size();i++){

        k_adi=String.valueOf(kayit_liste.get(i).get("kullanici_adi")) ;

        if((ad.equals(k_adi)) )

        {

        Intent intent1=new Intent(Login.this,MainActivity.class);

        startActivity(intent1);

        }

        << eşitlik ıslemını bukadar basıt yolla yapmam hatalı sanırım. ama ben hıcbı onceden gırmısmı veya sıfre formata uygunmu felan bunları yapmak ıstemedım basıt bı uye ol ye gırıs yap yapmak ıstıyorumda.Sımdıden cok tesekkur ederım

        • dursun

          yazdıkalrım bırbırıne gırmıs 🙂

          • Dediğiniz gibi çok karışmış . Sorununuzu anlayamadım. Login ekranı ile ilgili mi sorun? Eğer sorun ordaysa soruyu o dersin altından daha anlaşılır şekilde sorarsanız sevinirim.

          • dursun

            şu sekılde ben logın olma ekranınada baktım fakat orda bılgılendırme oldugu ıcın cok ıslem kulalnılmıs mesela post gonderme veya maıl formatına uyumluluk gıbı.ben sadece kullanıcıdı ve sıfre ıle uye olacak sonrada logın sayfasından kullanıcıadı ve sıfreyle gırıs apıcak bunu ıstıyorum acama login.java daki oncreate() metodu ne olur bunu yapamadım. login.xml sayfasındaki edıttexlerı strınglere atadım, verıtabanındaki kullanıcı adı ve sıfre alanlarınıda bı strınge atadım ve ‘if’ kullanarak bunların bırbırıne esıtse maın.xml e gıt dedım ama olmadı. su sekılde.
            ad=kadi.getText().toString();

            Database db = new Database(getApplicationContext());

            kayit_liste = db.kayitlar();

            for(int i=0;i<kayit_liste.size();i++){

            k_adi=String.valueOf(kayit_liste.get(i).get("kullanici_adi")) ;

            if((ad.equals(k_adi)) )

            {

            Intent intent1=new Intent(Login.this,MainActivity.class);

            startActivity(intent1);

            }

          • dursun

            tesekkurler cok basınızı agrıttım ama oldu verıtabanı ısmını yanlıs yazmısım tsekkurler 🙂

          • Önemli değil. Aklınıza takılan soruları çekinmeden hem bu dersim hemde diğer derslerim için sorabilirsin. Sana tavsiyem amacın sadece login bilgilerini tutmak ise şu dersime de göz atabilirsin.Çok daha basit işlemlerle çözersin ve sqlite ile uğraşmazsın.
            http://www.mobilhanem.com/android-sharedpreferences-kullanarak-login-ekran-yapimi/
            Kolay Gelsin..

  • Mustafa

    Taha bey kaynak kodlarınızı eclips te import ediyorum fakat açılmıyor java ve xml kodlarını göremiyorum
    “An error has occurred. See error log for more details.

    java.lang.NullPointerException”
    hataaı alıyorum yardımcı olabilir misiniz

    • Nasıl yani kaynak kodlarda mı hata var ? Kaynak kodları indirip import ederken mi hata alıyorsun?

  • dursun

    sqlite ile galerideki bir resmi tutabılırmıyız acaba.Yolunuda tutsak olur veya resimleri eğer oluyosa bit seklindede tutabılırız ama bu mümkğnmğ acaba

    • Tutabilirsin tabi. Sdcarda kaydedersin. Path ‘ini yani yolunuda sqlite’dad tutarsın. Bit olarak filan kaydetmek gereksiz olur.

      • dursun

        acaba yolunu nası alabılırız yardımcı olurmusunuz?

        • Resimleri sdcarda kaydedebiliyor musun?

          • dursun

            ben sadece galerideki herhangı bır resmı uygulamama ekleyıp sqlite verıtabanında saklamak ıstıyorum. sadece yolunu saklasakda olur sanırım ama nasıl yapıcam bılmıyorum acıkcası 🙂

  • Şahin

    Teşekkürler merak ettiğim bir konuydu işime yarayacaktır.

    • Yorum için ben teşekkür ederim.İşinize yaramasına sevindim.

  • ssalt

    Öncelikle çok teşekkür ederim ders için kendime göre düzenleyip kullandım. Benim sorum aynı kitabı kişi ikinci defa ekleyemesin bunu nasıl kontrol ederiz acaba.

    • Bu örnekte kitap adını unique kullanabilirsin.ama kitap adını unique kullanmak pekte mantıklı değil bunu baştan söleyim . Bu örnek için konuştuğumuzda unique tutulabilecek tek değer kitap adıdır. bunuda şöyle yaparsın yeni kitap eklendiği zaman database’e bir sorgu yollarsın. Bu sorgu aynı kitap adından var mı yok mu onu saydırırsın. Aynı kitap adı ile kayıt varsa uyarı verdirirsin kaydetmezsin.

  • taha

    kitap.put(KITAP_ADI, cursor.getString(0));

    kitap.put(KITAP_YAZARI, cursor.getString(1));

    kitap.put(KITAP_BASIM_YILI, cursor.getString(2));

    kitap.put(KITAP_FIYATI, cursor.getString(3));

    kitap.put(OGRENCI_TEL, cursor.getString(4));
    öğrenci tel ekleynce problem çıkıyor.

  • taha

    public void onCreate(SQLiteDatabase db)

    {

    db.execSQL(“CREATE TABLE ” + TABLE_NAME + “( KITAP_ID INTEGER PRIMARY KEY AUTOINCREMENT , KITAP_ADI TEXT NULL, KITAP_YAZARI TEXT NULL, KITAP_BASIM_YILI TEXT NULL, KITAP_FIYATI TEXT NULL, OGRENCI_TEL TEXT NULL, DANISMANI TEXT NULL, GRUBU TEXT NULL )”);

    }

  • taha

    database te açtıım sütünleri görmüyor ne yapabilir

    • Peki uygulama çalısıırken bir hata veriyor mu.? Sütunları olusturdugun yeri paylasırmısın? yani benim kaynak kod için söylüyorum String CREATE_TABLE ‘ ı paylasırsan hata var mı inceleriz.

      • taha

        db.execSQL(“CREATE TABLE ” + TABLE_NAME + “( KITAP_ID INTEGER PRIMARY KEY AUTOINCREMENT , KITAP_ADI TEXT NULL, KITAP_YAZARI TEXT NULL, KITAP_BASIM_YILI TEXT NULL, KITAP_FIYATI TEXT NULL, OGRENCI_TEL TEXT NULL, DANISMANI TEXT NULL, GRUBU TEXT NULL )”);

  • taha

    sizin yaptığınız database yeni sütünlar eklediğim ama database yeni eklediğim sütünleri görmüyor yardımcı olursanız çok memnun olurum.

  • taha

    Selamlar Hocam ListView alfabetik sıralama nasıl yapılır?

    • Listview içeriğini Sqlite dan mı çekeceksin sunucudan mı gelecek?

      • taha

        sqlite çekeceğim

        • Yazdığın query nin sonuna “ORDER BY TITLE COLLATE NOCASE” ekliyeceksin. Ordaki TITLE kısmı senin sıralama yapmak istediğin tablodaki alan adı olacak.

  • Ahmet

    SQL Sorgu cümlem doğrumu?

    String selectQuery = “SELECT * FROM ” + TABLE_NAME + ” WHERE BILDIRIM_DURUM=’0′ ORDER BY id DESC Limit 1″;

    • Bir hata gözükmüyor. Eğer data gelmiyorsa tablonu incelemen gerekir.Bu dersimi incelersen nasıl inceleyebileceğin konusunda fikir sahibi olabilirsin.

      http://www.mobilhanem.com/android-eclipse-sqlite-plugin-ve-sqlite-database-browser-kullanimi/

      • Ahmet

        Eğer bu sorguyu çalıştırırsam, program durduruldu hatası veriyor. Yani eğer kayıt gelmiyorsa program sürekli durduruldu hatası mı verecek?
        Ayrıca linkini attığınız konuyu dün inceledim. 2. Resimde 3. tıkladığınız yere ben tıkladığı zaman hiç bir şey listelenmiyor(Klasör içeriği). Bu telefonun root olmamasından mı kaynaklanıyor acaba?
        Teşekkür ederim, dönüş bekliyorum.

        • Dönen hata kayıt gelmediğinden kaynaklı olduğuna emin misin? Burdaki örnek uygulamamızda kayıt yoksa hata vermiyor. O önlemleri sen alıcaksın. Database dolumu boş mu bakacaksın. Ondan sonra işlem yapıcaksın ki patlamasın. Hiç olmadı try catch içinde yapacaksın boş gelirse patlamıcak.
          ikinci sorunda ise ya cihazın rootlu olacak yada direk emülatör üzerinde geliştirme yaparak o directorye ulaşabilirsin.

  • Yakup

    Hayırlı sabahlar. Hocam projenizi biraz uyarlamaya çalıştım kendime göre fakat main activity class ında onOptionsItemSelected bölümünde case R.id.ekle de ekle hep kırmızı yanıyor böyle bir değişken yok ortada. Bu ekle id si sanırım actionbar daki uygulama ilk açıldığında görünen buton. Bu butonu nasıl yapabilirim? Şimdiden teş.ler

  • Selçuk TURAN

    Merhaba öncelikle ben de böyle bir örneği bizlere hem de yorumlayarak verdiğiniz için teşekkür ederim. Kodlarınızı inceleyerek kah yazarak kah kopyala yapıştır ile eclipse de uyguladım. Tüm hataları bulup tek tek giderdim ve programı da çalıştırdım. Ancak belki komik gelecek “”Henüz Kitap Eklenmemiş.n Yukarıdaki + Butonundan Ekleyiniz” TOAST’ını da gördüm. Yalnız + butonu yok ortada. NErede bu + butonu diye çok aradım ama bulamadım. Yukardaki Action Bar da (Altüste üç nokta) tıklayınca yalnız Setting geliyor. Lütfen nerede bu + butonu ? 😀

    • Merhabalar ,
      Bizim uygulamamızı direk indirip denediğinizde + butonunu göreceksiniz. Ben şimdi tekrar indirdim acaba sorun mu var diye test ettim ve ekran görüntüsü aldım. Sağ üstte tarafta + butonu mevcuttur.

  • Alp Tekin

    bir rehber uygulaması yaptım. Ancak veri çok olunca ulaşmak zor oluyor listview deki verileri alfabetik olarak aramayı nasıl yapabiliriz. yada editex le aratmayı .. kolay gelsin iyi çalışmalar

  • Alp Tekin

    bir rehber uygulaması yaptım. Ancak veri çok olunca ulaşmak zor oluyor listview deki verileri alfabetik olarak aramayı nasıl yapabiliriz. yada editex le aratmayı .. kolay gelsin iyi çalışmalar

  • ubarez

    Merhaba. Benim derdim İLİŞKİSEL VERİTABANI ile. En azından 3 tabloyu birbirine NASIL
    bağlayabilirim? Bu konuda örnek verebilir misiniz?
    Kolay gelsin.

  • barış

    Merhaba herşeyi birebir yapmama rağmen uygulamayı çalıştırınca “unfortunately sqlite has stopped” uyarısı alıyorum sebebi ne olabilir acaba?

    • Eğer çözemediyseniz Logcat çıktısı paylaşırsanız yardımcı olabiliriz.

  • Pingback: Android Sharedpreferences Kullanımı - Mobilhanem()

  • Kıvanç

    Selam, bu linkteki örnek gibi, biz liste’ye, badgeview ekleyebilir miyiz, bir yolu varmı acaba?
    https://github.com/jgilfelt/android-viewbadger
    Yoksa listview, özelliğini değiştirmek mi gerekli(custom Listview)? Teşekkürler.

    • Custom Listview yapmadan yani Simple adapter kullanarak bunu yapamazsın. Custom Listview yapıp kendin yapacaksın badgeview alanını.

      • Kıvanç

        Cevap için teşekkür ederim. Ancak zaten Custom Listview yaptıktan sonra BadgeView kullanmanın bir anlamı kalmıyor. Keşke “simple adapter” a eklenebilseydi. Teşekkürler.

  • Ahmet hakan

    database clasın içinde yazilmiş fonksiyonu mainactivityde nasil kullanıyorsunuz

    • Anladığım kadarıyla aşağıdaki kod parçasından bahsediyorsunuz…

      Database db = new Database(getApplicationContext()); // Db bağlantısı oluşturuyoruz. İlk seferde database oluşturulur.
      kitap_liste = db.kitaplar();//kitap listesini alıyoruz
      if(kitap_liste.size()==0){//kitap listesi boşsa
      Toast.makeText(getApplicationContext(), "Henüz Kitap Eklenmemiş.\nYukarıdaki + Butonundan Ekleyiniz", Toast.LENGTH_LONG).show();
      }else{
      kitap_adlari = new String[kitap_liste.size()]; // kitap adlarını tutucamız string arrayi olusturduk.
      kitap_idler = new int[kitap_liste.size()]; // kitap id lerini tutucamız string arrayi olusturduk.
      for(int i=0;i

    • Database db = new Database(getApplicationContext()); // Db bağlantısı oluşturuyoruz. İlk seferde database oluşturulur.
      kitap_liste = db.kitaplar();

      Yukarıda Database Db = new Database(getApplicationContext()); ile Database objesi oluşturuyor ve oluşan Database objesine ait methodları kullanabiliyoruz.

  • Kerim Demir

    Hazır veritabanından listviewe veri çekmek istiyorum.bunun için de örneğin id=1 olan verilerin hepsi altalta listviewde görüntülensin istiyorum ama sadece ilk veriyi alıyor. diğer id=1 olan veriler listviewde görüntülenmiyor.Kullanığım kod aşağıdaki gibi.Yardımcı olursanız çok sevinirim.Teşekkürler.

    public HashMap kelimeDetay(int id) {
    HashMap kelime = new HashMap();
    String selectQuery = “SELECT * FROM Veri WHERE id=”+id;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    cursor.moveToFirst();

    kelime.put(TURKCENAME, cursor.getString(6));
    cursor.moveToNext();

    cursor.close();
    db.close();

    return kelime;

    }

    • Database’nin dolu olduğuna emin misin ? Genel olarak id ‘ler unique olarak tutulur ve id=1 dediğin zaman sadece 1 tane olur.

      • Kerim Demir

        public HashMap kelimeDetay(int id) {

        HashMap kelime = new HashMap();
        String selectQuery = “SELECT * FROM Quran WHERE surah_id=”+id;

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        cursor.moveToFirst();

        kelime.put(TURKCENAME, cursor.getString(6));
        cursor.moveToNext();

        cursor.close();
        db.close();

        return kelime;

        }

        Kod,veritabanı ve ekran çıktısı bu şekilde Ben örneğin surah_id kısmı 1 olan verilerin hepsini ekrana yazdırmak istiyorum ancak sadece ilk kayıt geliyor.

  • Eren Başaran

    Taha Hocam öncelikle ders için teşekkür ederim, çok işime yaradı. Projeyi indirdim Android Studio ya entegre ettim ve çalıştırdım burada hiç bir sorun yok. Sormak istediğim proje içerisinde oluşturduğumuz veritabanına fiziksel olarakta ulaşabilir miyiz? Ulaşabilirsek nerende ulaşabiliriz? Ben biraz aradım fakat bulamadım, yardımcı olursanız sevinirim.

    • Eren Hocam yorum için teşekkürler.
      Andorid Studio -> Tools -> Android -> Android Device Monitor -> File Explorer tabı
      Alttaki listelenen klasörlerden data->senin uygulama paket adı->databases
      Databaseini seçtikten sonra sol üstteki save disk ile kaydedebilirsin bilgisayarına.

      ÖNEMLİ NOT: Bunu sadece androidin kendi emülatöründe veya rootlanmış cihazlarda yapabilrisin.

      • Eren Başaran

        Buldum hocam, ben hep bi dosya yolunda aradığım için yanılmışım. Teşekkür ederim.

  • Salih Gökçe

    Merhabalar
    Bu uygulamanıza benzer bir ödevim var. Ekle Sil Güncelle vb. veritabanıyla alakalı işlemler yapılacak. Benim yapacağım uygulama localde değilde serverda çalışacak. Galiba web servise ile de bağlantılı olması gerekiyormuş. Bu konu hakkında hiçbir bilgim yok şuan. Ne yapmalıyım?Nerden başlamadıyım? Özellikle web serviceler ve server ile alakalı fazla bir bilgim yok. Hangi adımları takip etmeliyim? Yardımcı olursanız çok sevinirim. İyi çalışmalar diliyorum. Kolay gelsin.

  • cihad

    2 table olsa nasıl yapardık bunu? onCreate içine yazsak aynı şekilde olur mu? çakışma olabilir bu durumda özel bi fonksiyon içinde 2. tableyi yazabilir miyim?

  • cihad

    2 tablo olursa nasıl yapacağız?

  • umut

    kendi projeme eklemek istedim boyle bir hata ile karsılastım

    @Override
    public void onCreate(SQLiteDatabase db) {
    String CREATE_TABLE = “CREATE TABLE ” + TABLE_NAME + “(”
    + ID + ” INTEGER PRIMARY KEY AUTOINCREMENT,”
    + ODEME_TURU + ” TEXT,”
    + MIKTAR + ” TEXT,”
    + NOT + ” TEXT,”
    + TARİH + ” TEXT” + “)”;
    db.execSQL(CREATE_TABLE);

    }

    java.lang.RuntimeException: Unable to resume activity {com.gider.gelir.gelirgider/com.gider.gelir.gelirgider.MainActivity}: android.database.sqlite.SQLiteException: near “not”: syntax error (code 1): , while compiling: CREATE TABLE islemler_listesi(id INTEGER PRIMARY KEY AUTOINCREMENT,islem_tur TEXT,para TEXT,not TEXT,tarih TEXT)
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: #################################################################
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: Error Code : 1 (SQLITE_ERROR)
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: Caused By : SQL(query) error or missing database.
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: (near “not”: syntax error (code 1): , while compiling: CREATE TABLE islemler_listesi(id INTEGER PRIMARY KEY AUTOINCREMENT,islem_tur TEXT,para TEXT,not TEXT,tarih TEXT))
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: #################################################################
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4155)
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4246)
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3360)
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: at android.app.ActivityThread.access$1100(ActivityThread.java:221)
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: at android.os.Looper.loop(Looper.java:158)
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7225)
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: Caused by: android.database.sqlite.SQLiteException: near “not”: syntax error (code 1): , while compiling: CREATE TABLE islemler_listesi(id INTEGER PRIMARY KEY AUTOINCREMENT,islem_tur TEXT,para TEXT,not TEXT,tarih TEXT)
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: #################################################################
    12-15 22:06:19.541 13451-13451/com.gider.gelir.gelirgider E/AndroidRuntime: Error Code : 1 (SQLITE_ERROR)

    • Mehmet bozoğlu

      TARİH yazmışsın ya onu böyle yap hata Düzelir +TARIH + ” TEXT” + “)”;

  • okan

    kardeşim database adı kısmına oluşturduğumuz hosttaki database mi yazıcaz

    • Hosttakinden kastın sunucuda ki database ise hayır. Onun için webservis yazacaksın.

  • Mehmet bozoğlu

    Merhabalar öncelikle yaptığınız çalışmadan dolayı teşekkür ederim. Sqlite konusunda gayet açık ve anlaşılır Türkçe kaynak olması büyük bir avantaj, bir sorum olacak size yaptığım uygulama da listeleme yöntemini sizin programdaki gibi yaptım farklı olarak listview de bir ikinci alanın daha görünmesini istedim lakin bir türlü başaramadım select sorgu cümlesini değiştirdim lakin durduruldu hatası aldım.

  • Yunus

    Merhabalar. Öncelikle konu anlatımı ve uygulama için teşekkür ederim. Merak ettiğim bir soru var? Android Studio üzerinde yaptığımız SQLite tabloları nereye kayıt ediliyor yani ben bu tablolara nasıl ulaşabilirim??

    • Bu tablolara emülatör üzerinden ve ya rootlu bir cihaz üzerinden ulaşabilirsin. Yani bu bilgiler cihazda saklanıyor.

  • Şahin Aygün Yıldırım

    Ellerinize sağlık. Her dersiniz gibi bu da harika. Sadece buradaki dersleri birleştirerek çok güzel şeyler ortaya çıkarmak mümkün. Sayenizde çok şey öğrendim 🙂