Soru & Cevap

Android Studio Sql Lite database güncelleme ?

29.05.2018 - 09:07

Merhaba arkadaslar Android Studio da sql lite kullanıyorum. Database sınıfı kodlarım aşağıdaki gibi

 


import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * Created by METEHAN on 17.11.2017.
 */

public class Database extends SQLiteOpenHelper {

    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "login_database";//database adı

    private static final String TABLE_NAME = "loginn";
    private static String KULLANICI_ID = "id";
    private static String KULLANICI_MAIL = "mail";
    private static String KULLANICI_SIFRE = "sifre";
    private static String KAYIT_TARIHI = "tarih";
    private static String ADI = "adi";
    private static String SOYADI = "soyadi";


    public Database(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }


    @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 + "("
                + KULLANICI_ID + " INTEGER PRIMARY KEY,"
                + KULLANICI_MAIL + " TEXT,"
                + KULLANICI_SIFRE + " TEXT,"
                + KAYIT_TARIHI + " TEXT,"
                + ADI + " TEXT,"
                + SOYADI + " TEXT" + ")";
        db.execSQL(CREATE_TABLE);
    }



    public void kullaniciEkle(String mail,String sifre,String tarih,String adi,String soyadi) {
        //kullaniciEkle methodu ise adı üstünde Databese veri eklemek için
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(KULLANICI_MAIL, mail);
        values.put(KULLANICI_SIFRE, sifre);
        values.put(KAYIT_TARIHI, tarih);
        values.put(ADI, adi);
        values.put(SOYADI, soyadi);

        db.insert(TABLE_NAME, null, values);
        db.close(); //Database Bağlantısını kapattık*/
    }


    public ArrayList<HashMap<String, String>> kitaplar(){

        //Bu methodda ise tablodaki tüm değerleri alıyoruz
        //ArrayList adı üstünde Array lerin listelendiği bir Array.Burda hashmapleri listeleyeceğiz
        //Herbir satırı değer ve value ile hashmap a atıyoruz. Her bir satır 1 tane hashmap arrayı demek.
        //olusturdugumuz tüm hashmapleri ArrayList e atıp geri dönüyoruz(return).

        SQLiteDatabase db = this.getReadableDatabase();
        String selectQuery = "SELECT * FROM " + TABLE_NAME;
        Cursor cursor = db.rawQuery(selectQuery, null);
        ArrayList<HashMap<String, String>> kitaplist = new ArrayList<HashMap<String, String>>();
        // looping through all rows and adding to list

        if (cursor.moveToFirst()) {
            do {
                HashMap<String, String> map = new HashMap<String, String>();
                for(int i=0; i<cursor.getColumnCount();i++)
                {
                    map.put(cursor.getColumnName(i), cursor.getString(i));
                }

                kitaplist.add(map);
            } while (cursor.moveToNext());
        }
        db.close();
        return kitaplist;
    }




    public HashMap<String, String> kullaniciDetay(){
        //Bu methodda sadece tek row değerleri alınır.

        //HashMap bir çift boyutlu arraydir.anahtar-değer ikililerini bir arada tutmak için tasarlanmıştır.
        //mesala map.put("x","300"); mesala burda anahtar x değeri 300.

        HashMap<String,String> kisi = new HashMap<String,String>();
        String selectQuery = "SELECT * FROM " + TABLE_NAME;

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

        cursor.moveToFirst();
        if(cursor.getCount() > 0){
            kisi.put(KULLANICI_MAIL, cursor.getString(1));
            kisi.put(KULLANICI_SIFRE, cursor.getString(2));
            kisi.put(KAYIT_TARIHI, cursor.getString(3));
            kisi.put(ADI, cursor.getString(4));
            kisi.put(SOYADI, cursor.getString(5));
        }
        cursor.close();
        db.close();
        return kisi;
    }


    public int getRowCount() { //tabloda kaç satır kayıtlı olduğunu geri döner

        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;
    }


    public void resetTables(){
        // Tüm verileri siler. tabloyu resetler.
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_NAME, null, null);
        db.close();
    }

    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        // TODO Auto-generated method stub

    }







}

 

 

Şimdi ben bu veritabanına mail şifre tarih isim soyisim yanına yeni bir sütün eklemek istiyorum uygulamayı biri ilk yüklediğinde sorun yok ama hazırda kullananlar güncellediğinde veritabanından hiç veri çekilemiyor bu sorunu nasıl aşabilirim

234 Görüntülenme

3 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user Hamza3444
Hamza3444
02.06.2018 - 05:42

Sorunu çözdüm çözüm açtığım ikinci konuda var aynı sorunu yaşayan bakabilir.

Profile picture for user Hamza3444
Hamza3444
31.05.2018 - 07:57

valla herşeyi denedim neden olmuyor anlamadım database versiyonu 2 yaptım ayrıca

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
        onCreate(db);

    }

bu koduda kullanıyorum yinede databaseden veri çekemiyorum

picture-2170-1480110808.jpg
serkan.alabas
31.05.2018 - 04:28

Merhabalar,

Tablonuza ilave sütunlar eklediğinizde aşağıdaki, DATABASE_VERSION'u yükseltiyor musunuz ? Sorun buradan kaynaklanıyor olabilir. Yani uygulamayı ikinci defa yükleyenlerde veri tabanı güncellenmiyor olabilir.

private static final int DATABASE_VERSION = 1;

İyi çalışmalar.

Hamza HAMZA
31.05.2018 - 07:57
valla herşeyi denedim neden olmuyor anlamadım database versiyonu 2 yaptım ayrıca public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME); onCreate(db); } bu koduda kullanıyorum yinede databaseden veri çekemiyorum