Soru & Cevap

SQLite database tarih kaydı sorunsalı

08.07.2015 - 05:07

ben android'de sqlite datasını anlamak için bir proje yazıyorum. fakat dataya tarih kaydetmem gerekiyor

datada veri tipini --> 'datetime default current_date' olarak kaydediyorum.

fakat sadece gün/ay/yıl almam gerek

onu string olarak alabildim fakat malum tipler uyuşmayınca select sorgusu çalışmıyor. Bu tarih oluşturma kodu..

       Date today = new Date();
       SimpleDateFormat  DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy");
       String date = DATE_FORMAT.format(today);

Aşağıdaki de dataya ekleme metodum.

    private void gelirEkle(<<?>> kayitTarihi, double miktar, String aciklama, int durum)
    {
        SQLiteDatabase db = v1.getWritableDatabase();
        ContentValues cv1 = new ContentValues();
        cv1.put("kayitTarihi", kayitTarihi);
        cv1.put("miktar", miktar);
        cv1.put("aciklama", aciklama);
        cv1.put("durum", durum);
        db.insertOrThrow("tblKayitlar", null, cv1);
    }
  • <<?>> yeri Date olarak kaydetsem bu sefer eklediğim 'date' değişkeni string tipinde olduğu için hata verir. 
  • <<?>> yeri String olarak kaydetsem bu sefer tarih işlemleri için sorgu yapamıcam. 

 

sizce nasıl yapabilirm?

1,416 Görüntülenme

1 Cevap

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

picture-32113-1525245330.jpg
tugbaustundag
08.07.2015 - 10:12

İlk öncelikle veritabanı tablonda  tarihi alanını string yaparsın.Benim verceğim örnek tablomun adı kullanici yaptım.

tabloya veri eklemek için asagıdaki gibi bir metod yazıp; 

 public void insertUser(String date){

        SQLiteDatabase db = this.getWritableDatabase();
        String table_name="kullanici";

        SQLiteStatement sqLiteStatement = db.compileStatement("" +
                "INSERT INTO " +
                table_name +
                " (date) " +
                " VALUES (?) ");
        sqLiteStatement.bindString(1, date);

        sqLiteStatement.executeInsert();
        db.close();
    }

 Veritabanıdaki kayıdı göstermek icinde;

 public String getData() {
        SQLiteDatabase db = this.getReadableDatabase();

        String[] columns={"date"};
        Cursor cursor=db.query("kullanici",columns,null,null,null,null,null);

        String  date="";
        if(cursor!=null && cursor.getCount()>0){
            cursor.moveToFirst();
            date = cursor.getString(cursor.getColumnIndex("date"));
        }

        cursor.close();
        db.close();
        return date;
    }

Son olarak bu metodları kullanarak;

Date today = new Date();
SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy");
String date = DATE_FORMAT.format(today);
Veritabani db=new  Veritabani(this);
db.insertUser(date);
Log.w("db",db.getPassword()); // veritabanı tablondan 08/07/2015 degerini yazdırabilirsin

 bu kodları kullanarak sonuc elde edebilirsin

Berk Ergün
10.07.2015 - 11:56
öncelikle cevabın için teşekkürler. yararlandığım parçalar oldu. fakat benim tarihlerle ilgili işlem yapmam gerek. kaydedilen ve listelenen tarih 'String' olduğu için "between" ile sorgu kullanamıyorum.
Tuğba Üstündağ
10.07.2015 - 04:10
İlk sorunda between yapmaya calıstıgında alakalı birsey söylememiştin. Bununla alakalı çözüm ise http://stackoverflow.com/questions/10832864/compare-dates-stored-as-string-in-android-sqlite-database sitesindeki son cevap sorununu çözüceğini düşünüyorum.Bir test edersin;)
Berk Ergün
10.07.2015 - 05:20
verdiğin site sorunumu çözdü. yardımın için tekrar teşekkür ederim :)