Soru & Cevap

Android studio sqllite güncelleme olayı ...

01.06.2018 - 07:57

Merhabalar arkadaslar
Android Studio ve sql lite ile hazırladığım uygulamada veritabanına bir kolon eklemem lazım. yeni yükleyenler için sorun yok yeni kolonla tablo oluşuyo ama güncelleme yapanlarda sorun var. sanırım yeni tabloyu oluşturamıyo çünkü databaseden hiç veri çekemiyorum.
kodlarım aşağıdaki gibi yardımcı olursanız çok sevinirim

 

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 = 2;

// 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”;
private static String BULUNSUN = “bulunsun”;

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”
+ BULUNSUN + ” TEXT”+ “)”;
db.execSQL(CREATE_TABLE);
}

public void kullaniciEkle(String mail,String sifre,String tarih,String adi,String soyadi, String bulunsun) {
//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);
values.put(BULUNSUN, bulunsun);

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

public ArrayList<HashMap> 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> kitaplist = new ArrayList<HashMap>();
// looping through all rows and adding to list

if (cursor.moveToFirst()) {
do {
HashMap map = new HashMap();
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 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 db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
onCreate(db);

}

}

 

19 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:41

Sorunu çözdüm + SOYADI + ” TEXT” bölümündeki virgülden kaynaklanıyormuş.

Çağatay
02.06.2018 - 06:31
Evet gözümden kaçmış sorununu çözdüysen sorun yok :)
Profile picture for user Hamza3444
Hamza3444
02.06.2018 - 02:47
Ama drop tableden sonra hemen oncreate calidtiriyorum tekrar. Tabloyu yeniden olusturmasi gerekmezmi ?
Çağatay
02.06.2018 - 06:32
Drop table tabloyu kaldırıyor ama sen eğer varsa bu tabloyu kaldır demişsin yinede sorunun çözüldüyse o kısım öyle kalabilir
Profile picture for user cagatay347923
cagatay347923
02.06.2018 - 02:25

Merhaba sorunun cevabı sorunun içinde zaten verilmiş:@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME); onCreate(db); }

burada onUpgrade metodu 2 parametre alır eski versiyon,yeni version sen uygulama güncellendigi zaman eğer oluşturduğum tablonun adı varsa bu tabloyu kaldır demişsin.Kullanıcılar uygulamayı güncellediği zaman Database Oncreate metodunda yeni bir tablo oluşturur bu tablolarda tamamen boşdur.Fakat sen güncellendiği zaman bu oncreate metodunda oluşturulan tabloyuda tamamen silmiş oluyorsun güncellendiği zaman Drop Table yapmıcaksın kaldırmak istedigin tablo adını yazabilirsin oraya fakat eğer bu tablo varsa demişsin buda oncreate metodundaki tablonunda uygulama içinde var olduğunu gösterdiğine göre onu silmiş oluyorsun databaseden veri çekememenin sebebide drop table yazman tablonun tamamen silinmesi ve çekecek bir veride olmamasıdır,umarım anlaşılmıştır kolay gelsin.