Android Programlama Ders 38’de geçen derslerde yaptığımız uygulamayı geliştireceğiz.
Geçen derslerimizde kayıtları ekleme, okuma ve tablodan silme işlemlerini yapmayı öğrendik. Bu derste belirli kayıtları silme ve güncelleme işlemini öğreneceğiz. Yeni proje oluşturmayacağız, geçen dersteki uygulamayı kullanacağız. Ancak ekranı biraz değiştireceğiz. ID için giriş alanı, güncelleme ve silme butonları ekleyeceğiz.
main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <LinearLayout android:id="@+id/linearLayout4" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ID" android:layout_marginLeft="5dp" android:layout_marginRight="25dp"> </TextView> <EditText android:id="@+id/etID" android:layout_width="70dp" android:layout_height="wrap_content" android:layout_marginTop="2dp"> </EditText> <Button android:id="@+id/btnUpd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Update"> </Button> <Button android:id="@+id/btnDel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Delete"> </Button> </LinearLayout> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Name" android:layout_marginLeft="5dp" android:layout_marginRight="5dp"> </TextView> <EditText android:id="@+id/etName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"> <requestFocus> </requestFocus> </EditText> </LinearLayout> <LinearLayout android:id="@+id/linearLayout3" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Email" android:layout_marginLeft="5dp" android:layout_marginRight="5dp"> </TextView> <EditText android:id="@+id/etEmail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"> </EditText> </LinearLayout> <LinearLayout android:id="@+id/linearLayout2" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/btnAdd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Add"> </Button> <Button android:id="@+id/btnRead" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Read"> </Button> <Button android:id="@+id/btnClear" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Clear"> </Button> </LinearLayout> </LinearLayout>
Update butonuna bastığımız zaman Name ve Email alanından değerleri okuyacağız ve tabloya yazdıracağız. ID alanındaki değer, id tablodaki değer ile eşit olacak. Delete (Silme) butonuna bastığımız zaman ID alanından gelen değere göre tablodan kaydı silinecek. MainActivity.java’ya yeni nesneleri ve işletici ekleyelim.
final String LOG_TAG = "myLogs"; Button btnAdd, btnRead, btnClear, btnUpd, btnDel; EditText etName, etEmail, etID;...public void onCreate(Bundle savedInstanceState) {...btnUpd = (Button) findViewById(R.id.btnUpd); btnUpd.setOnClickListener(this);btnDel = (Button) findViewById(R.id.btnDel); btnDel.setOnClickListener(this);etID = (EditText) findViewById(R.id.etID); // veritabani yonetmek icin nesneyi olusturuyoruz dbHelper = new DBHelper(this); }onClick metoduna yeni komutları ekleyelim:public void onClick(View v) {// veriler icin nesneyi olusturuyoruz ContentValues cv = new ContentValues();// giris alanlardan verileri aliyoruz String name = etName.getText().toString(); String email = etEmail.getText().toString(); String id = etID.getText().toString();// veritabanıya bagliyoruz SQLiteDatabase db = dbHelper.getWritableDatabase();switch (v.getId()) { case R.id.btnAdd: ... case R.id.btnRead: ... case R.id.btnClear: ... case R.id.btnUpd: if (id.equalsIgnoreCase("")) { break; } Log.d(LOG_TAG, "--- Update mytabe: ---"); // guncellecek verileri hazirliyoruz cv.put("name", name); cv.put("email", email); // id guncelliyoruz int updCount = db.update("mytable", cv, "id = ?", new String[] { id }); Log.d(LOG_TAG, "updated rows count = " + updCount); break; case R.id.btnDel: if (id.equalsIgnoreCase("")) { break; } Log.d(LOG_TAG, "--- Delete from mytabe: ---"); // id siliyoruz int delCount = db.delete("mytable", "id = " + id, null); Log.d(LOG_TAG, "deleted rows count = " + delCount); break; } //veritabanıya baglantiyi kapatiyoruz dbHelper.close(); }
Yukarıdaki kodda id değişkenini ekliyoruz. Değişkenin amacı etID giriş alanından değeri almaktır. Switch’e iki yeni koşulu ekliyoruz.
btnUpd – mytable tabloda kayıtları güncelliyor. İlk başta id değerinin boş olup olmadığını kontrol ediyoruz. Güncellemek için cv’ye değeri atıyoruz. Güncelleme yapmak için update metodunu kullanıyoruz. Giriş değişkeni tablonun ismi, güncelleme değerleri içeren ContentValues, koşulu (Where) içeren satırı ve koşul satırı için argüman dizisi. Koşul satırında soru (?) işareti kullandık. Bunun amacı veritabanına sorgu geldiği zaman soru işareti yerine dizi argümandan değeri yerleştireceğiz. Bizim örnekte bu değer id’dir. Update metodu sonuç olarak güncellenen kayıtların sayısı gönderiyor. Biz bu sayıyı bildirime (Log) yazdıracağız.
btnDel – mytable tablodan kayıtları silmek için kullanılıyor. İlk aşamada id boş olup olmadığını kontrol ediyoruz. Sonra delete metodu çağırıyoruz. Giriş olarak tablonun ismi, koşul satırı ve koşul satırı için argümanların dizisi. Sonuç olarak delete metodu bize silinen kayıtların sayısı verecek. Bu sayıyı bildirime yazdıracağız. Update ve delete için koşular aynı ama küçük bir fark mevcuttur. Update için soru (?) işareti kullandım ve delete için direkt değeri belirtim. Bunu yaparak aynı işlem için iki farklı yöntemi göstermiş oldum. İkisini de kullanabilirsiniz.
Kaydedelim ve çalıştıralım. İki tane kayıt girelim ve Read butonuna basalım. Bildirime bakalım:
ID = 1, name = Omer Aslan, email = [email protected]
ID = 2, name = Osman Bayrak, email = [email protected]
Şimdi ID = 2 kayıdı güncelleyelim. Bunu yapmak için ID alanına 2 değeri giriyoruz ve Name, Email alanlara yeni verileri giriyoruz.
Update butonuna basıyoruz ve bildirime bakıyoruz:
— Update mytabe: —
updated rows count = 1
Doğru bir tane kayıdı güncelledik.
Read butonuna basıyoruz ve bildirime bakıyoruz:
ID = 1, name = Omer Aslan, email = [email protected]
ID = 2, name = Osman Bey, email = [email protected]
Kayıdın güncellendiğini görüyoruz.
Şimdi ID = 2 kayıdı silelim. ID alanına 2 değeri giriyoruz.
Delete butonuna basıyoruz ve bildirime bakıyoruz:
— Delete from mytabe: —
deleted rows count = 1
Bir tane kayıdı sildik.
Read butonuna basıyoruz ve bildirime bakıyoruz:
— Rows in mytable: —
ID = 1, name = Omer Aslan, email = [email protected]
Tek kayıdı kaldı.
Eğer boş olan ID silmek isteseydik bir şey olmayacaktı çünkü daha önce koşulu koyduk. Eğer tabloda bulunmayan ID silmeyi istiyorsak delete metodu 0 değeri gönderecek. Bir şey silmedi çünkü silinecek kayıt bulunamadı.
MainActivity.java tam kodu:
import android.app.Activity; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity implements OnClickListener { final String LOG_TAG = "myLogs"; Button btnAdd, btnRead, btnClear, btnUpd, btnDel; EditText etName, etEmail, etID; DBHelper dbHelper;/** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);btnAdd = (Button) findViewById(R.id.btnAdd); btnAdd.setOnClickListener(this);btnRead = (Button) findViewById(R.id.btnRead); btnRead.setOnClickListener(this);btnClear = (Button) findViewById(R.id.btnClear); btnClear.setOnClickListener(this);btnUpd = (Button) findViewById(R.id.btnUpd); btnUpd.setOnClickListener(this);btnDel = (Button) findViewById(R.id.btnDel); btnDel.setOnClickListener(this);etName = (EditText) findViewById(R.id.etName); etEmail = (EditText) findViewById(R.id.etEmail); etID = (EditText) findViewById(R.id.etID);// veribani yonetmek icin nesneyi olusturuyoruz dbHelper = new DBHelper(this); }public void onClick(View v) {// veriler icin nesneyi olusturuyoruz ContentValues cv = new ContentValues();// giris alanlardan verileri aliyoruz String name = etName.getText().toString(); String email = etEmail.getText().toString(); String id = etID.getText().toString();// veritabanina bagliyoruz SQLiteDatabase db = dbHelper.getWritableDatabase();switch (v.getId()) { case R.id.btnAdd: Log.d(LOG_TAG, "--- Insert in mytable: ---"); cv.put("name", name); cv.put("email", email); // kayidi ekliyoruz ve ID aliyoruz long rowID = db.insert("mytable", null, cv); Log.d(LOG_TAG, "row inserted, ID = " + rowID); break; case R.id.btnRead: Log.d(LOG_TAG, "--- Rows in mytable: ---"); // veritabanini sorguluyoruz ve Cursoru aliyoruz Cursor c = db.query("mytable", null, null, null, null, null, null);// Cursoru birinci satira yerlestiriyoruz // satirlari bulmadigi zaman false gondericek if (c.moveToFirst()) {// isimlere ve emaile gore satirlarin numarayi belirliyoruz int idColIndex = c.getColumnIndex("id"); int nameColIndex = c.getColumnIndex("name"); int emailColIndex = c.getColumnIndex("email");do { // numaralari bildirime yazdiriyoruz Log.d(LOG_TAG, "ID = " + c.getInt(idColIndex) + ", name = " + c.getString(nameColIndex) + ", email = " + c.getString(emailColIndex)); // sonraki satira geciyoruz // sonraki satiri bulmadigi zaman false gondericek - // donguden cikiyoruz } while (c.moveToNext()); } else Log.d(LOG_TAG, "0 rows"); c.close(); break; case R.id.btnClear: Log.d(LOG_TAG, "--- Clear mytable: ---"); // kayitlari siliyoruz int clearCount = db.delete("mytable", null, null); Log.d(LOG_TAG, "deleted rows count = " + clearCount); break; case R.id.btnUpd: if (id.equalsIgnoreCase("")) { break; } Log.d(LOG_TAG, "--- Update mytabe: ---"); // guncellecek kayitlari hazirliyoruz cv.put("name", name); cv.put("email", email); // id ye gore guncelliyoruz int updCount = db.update("mytable", cv, "id = ?", new String[] { id }); Log.d(LOG_TAG, "updated rows count = " + updCount); break; case R.id.btnDel: if (id.equalsIgnoreCase("")) { break; } Log.d(LOG_TAG, "--- Delete from mytabe: ---"); // id ye gore siliyoruz int delCount = db.delete("mytable", "id = " + id, null); Log.d(LOG_TAG, "deleted rows count = " + delCount); break; } //veritabanina baglanti kapatiyoruz dbHelper.close(); }class DBHelper extends SQLiteOpenHelper {public DBHelper(Context context) {super(context, "myDB", null, 1); }public void onCreate(SQLiteDatabase db) { Log.d(LOG_TAG, "--- onCreate database ---"); // tabloyu olusturuyoruz db.execSQL("create table mytable (" + "id integer primary key autoincrement," + "name text," + "email text" + ");"); }public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} }}
Ders Sonu Notları:
Son iki dersimizde SQLite’ta kayıtları okuma, yazma, ekleme, silme ve güncelleme yapmayı öğrendik. Gelecek derste query metodunu ayrıntılı inceleceğiz ve sıralama, gruplama, koşuları, having kullanmayı öğreneceğiz.