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.
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>
<?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>



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..
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.
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.
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
Birde sizin örnekte eklenecek data sayısını artırınca da hata veriyor ve force quit demek zorunda kalıyorum ..
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?
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
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.
program çalışmıyor
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.
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);
}
});