Mehmet Ethem SULAN :: Android :: Android SQLite Database Sample

Android ile SQLite veritabanina kayit eklemeye calistim. Tablo nasil create edilecegini ve SQLiteOpenHelper sinifini extends ederek nasil kullandigini aciklamaya calistim.
SQLite nasıl çalıştığını bilmiyorsanız How to using SQLite Database in Java örneğine bakabilirsiniz.
Ayrica SQLiteDatabase ve ContentValues siniflarini kullanarak kullanicidan aldigim degerleri insert ettim. Ve Cursor ile result degerlerini eristim. Genelde ornekleri Android 3.0 ile yaziyorum.

view


KisiVeritabani.java

package com.database.cont;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class KisiVeritabani extends SQLiteOpenHelper {
	// Database, tablo ve tabodaki column adlari
	public static final String DATABASE_NAME = "ethemsulan";
	public static final String TABLE_NAME = "kisi";
	public static final String KISI_ADI = "ad";
	public static final String KISI_SOYAD = "soyad";
	public static final String KISI_YAS = "yas";
	public static final int DATABASE_VERSION = 1;

	public KisiVeritabani(Context context, String name, CursorFactory factory,
			int version) {
		super(context, name, factory, version);

	}

	// table ve alanlarini olsuturuyor.Dikkat + ile string eklediginizde
	// oncekinden ayirmak
	// icin bosluk birazkin. Mesela sql="CREATE TABLE bosluk"+TABLE_NAME gibi
	@Override
	public void onCreate(SQLiteDatabase dbObject) {
		String sql = "CREATE TABLE " + TABLE_NAME + " ("
				+ "id INTEGER PRIMARY KEY AUTOINCREMENT," + KISI_ADI
				+ " TEXT NOT NULL," + KISI_SOYAD + " TEXT NOT NULL," + KISI_YAS
				+ " INTEGER" + ")";
		dbObject.execSQL(sql);

	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		if (oldVersion >= newVersion)
			return;

		String sql = null;
		if (oldVersion == 1)
			sql = "alter table " + TABLE_NAME + " add note text;";
		if (oldVersion == 2)
			sql = "";

		Log.d("EventsData", "onUpgrade	: " + sql);
		if (sql != null)
			db.execSQL(sql);

	}

}

MyKisiActivity.java

package com.database.kisi;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
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;
import android.widget.TextView;
import android.widget.Toast;

import com.database.cont.KisiVeritabani;

public class MyKisiActivity extends Activity {
	private KisiVeritabani kisiVeritabani;
	private Button save_button;
	private Button reset_button;
	private EditText ad_text;
	private EditText soyad_text;
	private EditText yas_edit;
	private ContentValues conValues;
	private SQLiteDatabase dbObject;
	private TextView text_count;
	private Cursor cursorRecordResult;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		save_button = (Button) findViewById(R.id.button1);
		reset_button = (Button) findViewById(R.id.button2);
		ad_text = (EditText) findViewById(R.id.editText1);
		soyad_text = (EditText) findViewById(R.id.editText2);
		yas_edit = (EditText) findViewById(R.id.editText3);
		text_count = (TextView) findViewById(R.id.textView4);
		// KisiVeritabani sinifindan setbir obje create ediyoryoruz.
		kisiVeritabani = new KisiVeritabani(getApplicationContext(),
				KisiVeritabani.DATABASE_NAME, null,
				KisiVeritabani.DATABASE_VERSION);
		// SQLiteDatabase yazilabilir oldugunu beliritiyoruz:
		// getWritableDatabase metodu ile.
		dbObject = kisiVeritabani.getWritableDatabase();
		// (sutun ismi, value) seklinde set olusturmak icin create ettik
		conValues = new ContentValues();
		// Button click edildiginde girilen veririleri save ettik.
		save_button.setOnClickListener(new Button.OnClickListener() {

			@Override
			public void onClick(View v) {
				saveRecord();
				resetValues();
				// Textviewde toplam kayit sayisini tutuyoruz.
				getRecordCount();

			}
		});
		// reset click edildiinde textviewlerin icierigi sifirlaniyor
		reset_button.setOnClickListener(new Button.OnClickListener() {

			@Override
			public void onClick(View v) {

				resetValues();

			}
		});

	}

	protected void getRecordCount() {
		// SQLiteDatabase objesine bu sefer kisiVeritabani yazilabilir seklinde
		// erisime aciyoruz.
		// kisiVeritabani.getReadableDatabase()
		dbObject = kisiVeritabani.getReadableDatabase();
		// Sadece kisi adlarini Cursor'a atiyorum. selectRecords.getCount() ile
		// kayit sayisini textviewe yaziyorum.
		String[] columns = { KisiVeritabani.KISI_ADI };
		// Cursor Java'daki ResultSet gibi select edilen degerleri tutuyor.
		// selectRecords. ctrl+space basarsaniz kullanabileceginiz moveToFirst,
		// moveToLast,
		// moveToNext... metodlarindan lazimn olani kullanabilirisniz.
		// dbObject.query(distinct, table, columns, selection, selectionArgs,
		// groupBy, having, orderBy, limit) seklinde sorgu yapabilirsiniz
		cursorRecordResult = dbObject.query(KisiVeritabani.TABLE_NAME,
				columns, null, null, null, null, null, null);
		text_count.setText(String.valueOf(cursorRecordResult.getCount()));

	}

	protected void resetValues() {
		ad_text.setText("");
		soyad_text.setText("");
		yas_edit.setText("");

	}

	protected void saveRecord() {
		// yas icin int kontrolu yapilmamis
		// conValues ye ad, soyad,yas sutunlarina kullanicidan alinan degerler
		// ataniyor.
		conValues.put(KisiVeritabani.KISI_ADI, ad_text.getText().toString());
		conValues.put(KisiVeritabani.KISI_SOYAD, soyad_text.getText()
				.toString());
		conValues.put(KisiVeritabani.KISI_YAS, yas_edit.getText().toString());
		try {
			// dbObject.insert(table, nullColumnHack, values) seklinde bir
			// metod.
			// belirtilen tabloya ContentValues setini ekliyor.
			dbObject.insert(KisiVeritabani.TABLE_NAME, null, conValues);
			Log.d("DDMS'ye", "kayit basarili degerini yaz.");
		} catch (SQLiteException e) {
			Log.d("eHata", e.getLocalizedMessage());
		}

	}
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TableLayout
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:id="@+id/tableLayout1">

    <TableRow
    android:layout_width="match_parent"
    android:id="@+id/tableRow1"
    android:layout_height="wrap_content">
        <TextView
        android:id="@+id/textView1"
        android:layout_height="wrap_content"
        android:text="Adiniz: "
        android:layout_width="wrap_content">
        </TextView>
        <EditText
        android:text="ad"
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        </EditText>
    </TableRow>
    <TableRow
    android:layout_width="match_parent"
    android:id="@+id/tableRow2"
    android:layout_height="wrap_content">
        <TextView
        android:text="Soyadiniz:"
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        </TextView>
        <EditText
        android:text="soyad"
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        </EditText>
    </TableRow>
    <TableRow
    android:layout_width="match_parent"
    android:id="@+id/tableRow3"
    android:layout_height="wrap_content">
        <TextView
        android:text="Yasiniz:"
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        </TextView>
        <EditText
        android:text="yas"
        android:id="@+id/editText3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        </EditText>
    </TableRow>
    <TableRow
    android:id="@+id/tableRow4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
        <Button
        android:text="Save"
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        </Button>
        <Button
        android:text="Reset"
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        </Button>
        <TextView
        android:text=""
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        </TextView>
    </TableRow>

    </TableLayout>

</LinearLayout>


AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.database.kisi"
      android:versionCode="1"
      android:versionName="1.0">

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MyKisiActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>


Download source code: AndroidDatabaseUyg.tar.gz

Comments

There are 11 comments for this post.

  1. Ercan Pınar on Mayıs 1, 2011 8:50 pm

    Merhaba ethem ,
    Bir sorum olacaktı,
    EditText soyad_text;
    soyad_text = (EditText) findViewById(R.id.editText2);
    //seklinde aldıgın girilen text i
    soyad_text.getText().toString()
    //seklinde string olarak algılatıp database e //yazdırıyorsun
    Bende bir uygulama yaparken
    EditText i aynen cektım ve
    String soyad=soyad_text.getText().toString();
    seklinde atama yaptım fakat bana bos deger dönderdi cıktı almak istedim alamadım.
    Parse int ile bu degeri integere cevirecektım bu bos görünen değerin string olmadıgı şeklinde uyarı aldım
    bunu nasıl çözerim acaba ?
    iyi calısmalar..

  2. ethemsulan on Mayıs 2, 2011 5:25 pm

    Ercan, şuanda Android ile ilgili problemleri çözecek kadar bilgi sahibi değilim. Ben de bir aydır Android i öğrenmeye başladım. Tek söyleyebileceğim şey debug edersen mutlaka sorunun neyden kaynaklandığını bulursun. Java yazarken kola kolay debug etmezdim ama Android uygulamalarında en iyi yol debug etmektir bence.

  3. ethemsulan on Mayıs 2, 2011 5:28 pm

    Bu arada yazdığım tüm kodları test ediyorum. Hepsi sorunsuz çalışıyorlar. Yani yukarıdaki örnek uygulamanın source kodunu download edip çalıştırabilirsin. Örnekleri Android 3.0 ile yazıyorum.

  4. burhan cerit on Temmuz 3, 2011 5:12 pm

    iyi günler öncelikle şunu söyleyeyim Türkiyede de bu konu ile ilgilenen kişiler oldugunu bilmek güzel. Sayın Ethem bey bende bu konu ile yeni uğraşmaya başladım ve 2.1 versionu için bir application geliştirmem lazım açıkcası version konusunda da biraz internetten aradım ve en cok kullanılanlar 2.1 2.2 1.6 oldugunu gördüm bu konudada versionlar için bir öneriniz olursa sevinirim ama bu SQlite konusu biraz karışık açıkcası bütün versionlarda aynı code dogru çalışmıyor acaba 2.1 versionu için sizin verdiginiz örnekteki code’un database “constructor” ‘ını yazabilir misiniz ? teşekkürler

  5. burhan cerit on Temmuz 5, 2011 9:19 am

    Birde sizin örnekte eklenecek data sayısını artırınca da hata veriyor ve force quit demek zorunda kalıyorum ..

  6. kübra on Temmuz 22, 2011 8:27 am

    Yapılan bu uygulamada oluşturulan tablo nereye oluşturuluyor. Ben cihazım üzerinde db uzantılı bir dosya oluşturup verileri ona kaydetmek ve o dosyayı cihazda sürekli tutmak istiyorum.. Bunu nasıl yapabilirim bu uygulamada bu tarz bir şey oluyor mu yoksa uygulama kapandığında veriler yok mu oluyor?

  7. ethemsulan on Temmuz 22, 2011 8:46 am

    Burhan o kadar bilgim yok. Kübra telefonun root olmadan göremzsiniz. Emulatorde kodu çalıştırıp görebilirsiniz. Bunun için DDMS–>File Explorer –>data–>data–>kendi uygulamanızın ismini bulup dataabse klasörün altında. Mesela databaseIsmi.db

  8. ethemsulan on Temmuz 22, 2011 8:51 am

    Normalde silinmez ama facto reset veya public static final int DATABASE_VERSION = 1; versiyonu kodunu 2 yapıp uygulamayı çalıştırınca veya cihazın içine girip settings–>Applications–>Manage applications–>kendi uygulamanızı tıklayıp–>Clear data seçerek silebilirsiniz.

  9. Mustafa on Aralık 28, 2011 11:33 pm

    program çalışmıyor

  10. bmavus on Şubat 12, 2012 9:54 am

    veritabanı kısmında updatein içeriğinin nasıl olması gerektiği beni uğraştırıyordu. bu paylaşım için teşekkürler. o problemi hallettim.

  11. ozgurguler on Şubat 29, 2012 8:32 pm

    Merhaba ;

    o kadar uğraştım bir türlü mssql e bağlanarak çektiğim sorgunun sonucunu text e alamadım yardım edecek varsa çok sevinirim ;

    Button Sorgula=(Button)findViewById(R.id.Sorgula);
    Sorgula.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
    // TODO Auto-generated method stub

    Connection conn = null;
    String url = “jdbc:jtds:sqlserver://172.16.1.68:1433;databaseName=MikroDB_V14_URETIM”;
    String driver = “net.sourceforge.jtds.jdbc.Driver”;

    String userName = “sa”;
    String password = “LOGO”;
    try {
    Class.forName(driver).newInstance();
    conn = DriverManager.getConnection(url , userName, password);
    conn.close();
    } catch (Exception e) {
    e.printStackTrace();
    }

    Connection con;
    Statement st = con.createStatement();
    String query = “select sto_kod,sto_isim from STOKLAR “;
    System.out.println(query);
    ResultSet rs = st.executeQuery(query);

    }
    });

Write a Comment

Let me know what you think?