Soru & Cevap

Her tıklamada tek id verisini çekme(sqlite)

05.05.2015 - 03:59

veri tabanı_

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 public void onCreate(SQLiteDatabase db) {

        db.execSQL("CREATE TABLE sorular (id INTEGER PRIMARY KEY AUTOINCREMENT , soru TEXT,A TEXT,B TEXT,C TEXT,D TEXT);");

    }

 

 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXIST sorular");
        onCreate(db);

    }

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Aktivity_

public class birinci extends Activity {
    private veritabani yarisma;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.soru_bir);


        yarisma = new veritabani(this);


        Button verigonder =(Button) findViewById(R.id.verigonder);

        verigonder.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                try{

                    Cursor cursor = KayitGetir();
                    KayitGoster(cursor);

                }
                finally{
                    yarisma.close();
                }

            }
        });

    }


        private String[] SELECT = {"id", "soru", "A", "B", "C", "D"};

    private Cursor KayitGetir() {

        SQLiteDatabase db = yarisma.getReadableDatabase();

        Cursor cursor = db.query("sorular", SELECT, null, null, null, null, null);

        startManagingCursor(cursor);
        return cursor;
    }

    private void KayitGoster(Cursor cursor) {
        StringBuilder builder = new StringBuilder("Sorular:n");


        while (cursor.moveToNext()) {


              Long id = cursor.getLong(cursor.getColumnIndex("id"));


            String soru = cursor.getString((cursor.getColumnIndex("soru")));
            String A = cursor.getString((cursor.getColumnIndex("A")));
            String B = cursor.getString((cursor.getColumnIndex("B")));
            String C = cursor.getString((cursor.getColumnIndex("C")));
            String D = cursor.getString((cursor.getColumnIndex("D")));

            builder.append(id).append("\n soru: ");
            builder.append(soru).append("\n A: ");
            builder.append(A).append("\n B: ");
            builder.append(B).append("\n C: ");
            builder.append(C).append("\n D: ");
            builder.append(D).append("\n");


        }

 

        TextView text = (TextView) findViewById(R.id.textView3);
        text.setText(builder);


    }

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Yapmak istediğim şeyi kısaca açıklayayım :

-Veritabanında id sıralamasına göre soru ve cevap seçenekleri oluşturdum.

-Butona her tıkladığımda sıralı bir şekilde verileri ekrana yazdıracağım ve önceden yazılı olan veriyi silmek istiyorum , ne yaptıysam olmadı bir fikri olan varmı ?

verileri çekebiliyorum ama tüm veriler ekrana geliyor.

 

 

28 Görüntülenme

1 Cevap

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

Profile picture for user green_day
green_day
05.05.2015 - 09:54

Mrb. Öncelikle veritabanı işlemleri yapacaksan ayrı bir class oluşturup onun metotlarını 

kullanmak daha mantıklı çünkü kod çok karışıyor senin örneğindeki gibi bir yerden sonra takip 

edemiyorsun. Ben kendi bilidigim gibi nasıl yaparım dersen:

VT adında bir class oluştur. Aşagıdaki gibi yapabilirsin içeriğini.

tablonun böyle olduğunu farz edersek:

ıd    Soru    A    B    C    D
1    ....    ...    ...    ...    ...
2    ....    ...    ...    ...    ...
3    ....    ...    ...    ...    ...

[code]
public class VT extends SQLiteOpenHelper {

    SQLiteDatabase db;
    
    public VT(Context c)
    {
        super(c,c.getDatabasePath("Test.db").toString(),null,3);
        db= getWritableDatabase();
        db.close();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        
        Log.e("X","Oncreate Calıştırıldı...");
        String sql= "CREATE TABLE test(ID INTEGER PRIMARY KEY, SORO TEXTA TEXT,B 

TEXT,C TEXT,D TEXT)";
        db.execSQL(sql);
        
    }
    
    public void kayitEkle (String soru, String a, String b, String c, String d )
    {
        db=getWritableDatabase();
        String vals[]={soru, a, b, c, d};
        db.execSQL("insert into test (soru,a,b,c,d) values (?,?,?,?)", vals);
        db.close();
    }
    
    public ArrayList<ContentValues> getSoru()
    {
        
        ArrayList<ContentValues> res= new ArrayList<ContentValues>();
        db= getReadableDatabase();
        Cursor c= db.rawQuery("select * from test ", null);
        
        while (c.moveToNext()) {
            String ID= c.getString(0);
            String SORU= c.getString(1);
            String A= c.getString(2);
            String B= c.getString(3);
            String C= c.getString(4);
            String D= c.getString(5);

            ContentValues cv= new ContentValues();
            cv.put("id", ID);
            cv.put("soru", SORU);
            cv.put("a", A);
            cv.put("b", B);
            cv.put("c", C);
            cv.put("d", D);
            res.add(cv);
        }
        
        return res;
    }
    
    
    public void delKayit(String Id)
    {
        db=getWritableDatabase();
        db.execSQL("delete from test where userid="+ Id);
        db.close();
    }
    
    
    
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        
    }
    
    
    

}


MainActivity.class

onCreate içerisinde

ArrayList<ContentValues> vtList;

int iterator=0;

VT veritabani=new VT(getApplicationContext()); vt classının obj. yarat
    

veritabani.kayitEkle("1","android","A","B","C","D");//veritabanına kayıt eklendi...
veritabani.kayitEkle("2","ios","A","B","C","D");

Button.onClickListener
{

vtList=veritabani.getSoru();

 

                        ContentValues cv= vtList.get(iterator);

                        String ID= cv.getAsString("id");
             String SORU= cv.getAsString("soru"); //cv.put yaparken tanımladığın                                 //key ile datanı çekiyorsun.
             String A= cv.getAsString("a");
             String B= cv.getAsString("b");
             String C= cv.getAsString("c");
             String D= cv.getAsString("d");

            
            txt.setText(Soru); //burada verilerini nereye yazdıracaksan. vs.
            
            veritabani.delKayit(ID);//daha sonra dediğin gibi ekrana basılan kayıtı silecek.

            iterator++;//iterator iyi arttır ve diğer soruya geç

        

}

[/code]

        
Ancak soruyu veritabanındn sileceksen uygulama calıştığında hata alabilirsin bunun için throw yapısını felan kullan gerçi kayıtı neden siliyorsun anlamadım da. 

Ama yerinde olsam dataları çektikten sonra grup halinde ArrayList e HashMap olarak tutar oradan key değerlerine göre kullanman daha doğru olacaktır.
                    

çağdaş
05.05.2015 - 11:03
Öncelikle verdiğiniz cevap için teşekkür ederim. Gösterdiğiniz yöntemler beni aşıyor biraz amatör seviyede sayılırım :D Ama biraz kuracalayınca halladerim bakalım. Aslında her çektiğim id satırını veritabanından değil , ekrandan silmeyi amaçlıyorum(c'deki clrscrn(); ekran temizle komutuna benzer bir yapı) , amacım bir çeşit bilgi yarışması yapmak tek bir ekran üzerinden butona basıldığında sırayla soruları getirmek .
greenday
05.05.2015 - 11:41
yok aslında hiç karışık değil kodu yazarken anlamaya çalış yaparsın lazım olacak olan her şey var orada deneye deneye istediğin olay çıkacaktır. Tıkanırsan yaz bakarız gene.