Android ile Harici Sql Veritabanını Projeye Yükleme

Bu makalemde Android kodları kullanarak , proje dışında var olan herhangi bir Sql veritabanı dosyanızı nasıl Android projenize kopyalayabilirsiniz konusunu anlatacağım.

1. SQLite veritabanını hazırlama

Eğer SQLite veritabanı dosyanız varsa , bu ayarları yapmanıza gerek yok.

Sql veritabanı dosyanızı düzenleyebilmek için, Win / Linux / Mac işletim sistemlerinde kullanabileceğiniz sürümleri var olan açık kaynak SQLite Database Browser programını indirmenizi tavsiye ederim.

SQLite Database Browser programını kullanarak Sql dosyanızı açın.Sonrasında programda Execute Sql bölümünü açıp, aşağıdaki sql sorgusunu kullanarak ” android_metadata” tablosunu oluşturun.

[php]
CREATE TABLE “android_metadata” (“locale” TEXT DEFAULT ‘en_US’)
[/php]

Sonrasında bu tablomuza bir tane kayıt girelim.

[php]
INSERT INTO “android_metadata” VALUES (‘en_US’)
[/php]

Veritabanı dosyanızı Android projenize kopyalabilmek için , veritabanınızdaki tablolarınızın primary id alanlarının adı “_id” olmalıdır.

SQLite Database Browser programında tablonuzu seçtikten sonra Modify Table özeliğini kullanarak aşağıdaki gibi kolaylıkla tablonuzdaki alan ismini değiştirebilirsiniz.
modifytableedittable

Ve böylelikle kopyalayacağımız SQLite veritabanı dosyamızı hazırlamış olduk…

showtable

2. Android uygulamanızdan, oluşturmuş olduğumuz veritabanına ulaşma ve veritabanını kopyalama

İlk önce “assets” adında yeni bir klasör oluşturup, projemize kopyalamak istediğimiz veritabanı dosyasını bu klasör içine koymalıyız.

Android Studio Ide ve Eclipse Ide programında assets klasörünü oluşturmanız gereken yollar:

Android Studio Ide programını kullanıyorsanız ProjeIsmi\app\src\main yolunu takip ederek main dizininin içine

Eclipse Ide programını kullanıyorsanız projenizin ana dizinine assest klasörünü oluşturmalısınız.

Sonrasında SQLiteOpenHelper sınıfından türeterek DatabaseHelper sınıfını oluşturup, şu kodları yazıyoruz.

[php]
package com.tugbaustundag.harici_sql_veritabanini_projeye_yukleme;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class DatabaseHelper extends SQLiteOpenHelper
{
static String DB_PATH;
//Veritabanı ismini veriyoruz
static String DB_NAME = “School”;

SQLiteDatabase myDatabase;

final Context myContext;

public DatabaseHelper(Context context)
{
super(context, DB_NAME, null, 1);

DB_PATH = context.getFilesDir().getParent() + “/databases/”;

this.myContext = context;
}
//Assest dizinine koyduğumuz sql dosyasını, Android projesi içine oluşturma ve kopyalamna işlemi yapıldı..
public void CreateDataBase()
{
boolean dbExists = checkDataBase();

if (!dbExists)
{
this.getReadableDatabase();

try
{
copyDataBase();
}
catch (Exception ex)
{
Log.w(“hata”,”Veritabanı kopyalanamıyor”);
throw new Error(“Veritabanı kopyalanamıyor.”);
}
}
}
//Sqlite veritabanı dosyasını açıp, veritabanımı kontrol ediyoruz
boolean checkDataBase()
{
SQLiteDatabase checkDB = null;

try
{
String myPath = DB_PATH + DB_NAME;

checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}
catch (Exception ex)
{
Log.w(“hata”,”Veritabanı açılamadı”);
}

if (checkDB != null)
checkDB.close();

return checkDB != null ? true : false;
}
///Assest dizinine koyduğumuz sql dosyasındaki verileri kopyalıyoruz
void copyDataBase()
{
try
{
InputStream myInput = myContext.getAssets().open(DB_NAME);

String outFileName = DB_PATH + DB_NAME;

OutputStream myOutput = new FileOutputStream(outFileName);

byte[] buffer = new byte[1024];

int length;

while ((length = myInput.read(buffer)) > 0)
{
myOutput.write(buffer, 0, length);
}

myOutput.flush();

myInput.close();
myOutput.close();
}
catch (Exception ex)
{
Log.w(“hata”, “Kopya oluşturma hatası.”);
}
}
//Veritabannı açma işlemi yapıldı

void openDataBase()
{
String myPath = DB_PATH + DB_NAME;

myDatabase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
}

@Override
public synchronized void close()
{
if (myDatabase != null && myDatabase.isOpen())
myDatabase.close();

super.close();
}

@Override
public void onCreate(SQLiteDatabase db) {

}

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

}
}
[/php]
Son olarak DatabaseHelper sınıfımızdaki CreateDataBase metodunu çağırıp , assest dizinine koymuş olduğumuz veritabanını,Android projesinin içinde oluşturup,verileri kopyalamasını sağladık ve verileri listview e yazdırdık.

[php]
package com.tugbaustundag.harici_sql_veritabanini_projeye_yukleme;
import java.util.ArrayList;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

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

//DatabaseHelper sınıfımızdaki CreateDataBase methodunu çağırıp , assest dizinine koymuş
//olduğumuz veritabanını,Android projesinin içinde oluşturup,verileri kopyalamasını sağladık…
DatabaseHelper dbHelper=new DatabaseHelper(this);
try
{
dbHelper.CreateDataBase();

}
catch (Exception ex)
{
Log.w(“hata”,”Veritabanı oluşturulamadı ve kopyalanamadı!”);
}

//Proje içine kopyalanmış olan veritabanımızdan verileri listview e yazdırdık

SQLiteDatabase db=dbHelper.getReadableDatabase();
String[] getColumnName={“student_name,student_surname”};
Cursor imlec=db.query(“student”, getColumnName, null, null, null, null, null);
ListView listview=(ListView)findViewById(R.id.listview);
ArrayList student=new ArrayList();
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_spinner_dropdown_item,student);

while(imlec.moveToNext()){
String student_name=imlec.getString(imlec.getColumnIndex(“student_name”));
String student_surname=imlec.getString(imlec.getColumnIndex(“student_surname”));
String name_surname= student_name+ ” “+student_surname;
student.add(name_surname);

}
listview.setAdapter(adapter);
imlec.close();
db.close();

}
}
[/php]

Sonuç..:)
sonuc

download

Kategori Genel, Makalelerim
Etiketler