SQlite

advertisement
BIL4106 - MOBiL
PROGRAMLAMA TEKNiKLERi
Yard. Doç. Dr. Oğuzhan Topsakal
[email protected]
30.04.2015
Bu Derste
•
Veri Saklama •
SQLite DB
•
SQLite DB ye saklama ve erisim
•
SQLite Örnekleri
•
Grup çalışması
•
Bireysel çalışma
•
SQLiteBrowser indirin
•
Kalem kağıt hazır olsun
•
Önceki projelerden aldığınız notları gruplara açıklanacak
2
SQLite Veritabanı ve SQL
•
Android SQLite veritabanı için destek sağlar.
•
•
SQLite az yer kaplayan, açık kaynak kodlu, ücretsiz veritabanıdır
•
http://www.sqlite.org/
•
http://www.sqlitebrowser.org/
•
http://www.sqlite.org/cvstrac/wiki?p=ManagementTools
Çabuk referans:
•
http://www.sqlite.org/lang_select.html
•
http://www.w3schools.com/sql/sql_quickref.asp
3
Veritabanı nedir?
•
Relational (ilişkisel) veritabanında (mantıksal olarak) veriler tablolar halinde
tutulur.
•
Tablodaki herbir satıra kayıt denir ve kayıtları kolonlar oluşturur.
•
Her bir tabloyu Exceldeki worksheet olarak görebiliriz.
4
Veri İhtiyaçlarınız?
•
Sizin projenizde ne tür verilere ihtiyacınız var?
•
Grup üyeleri birlikte çalışarak,
•
Projenizin adını
•
Projeniz çalışması için ihtiyacınız olan verileri yazınız. Örneğin eczaneler,
ingilizce kelimeler, …
•
Projeniz çalışırken saklayacağınız verileri yazınız. Örneğin kullanıcının aldığı
not, kullanıcının attığı mesaj, kullanıcı skoru, …
•
Bitiren el kaldırsın!
5
İlişkisel Veritabanı Dizayn Örneği - Okul
6
İhtiyacınız olan verilere örnekler veriniz
•
‘ProjeIsmi’DB.xls dosyasını oluşturun
•
Belirtmiş olduğunuz herbir veri grubu (tablosu) için bir worksheet oluşturun
•
Herbir worksheet de kolon başlıklarını bu tablo içinde kullanacağınız verilere göre
verin, örneğin:
•
eczaneler: id, isim, adres, ilçe, il, latitude, longtitude
•
Tweet: id, kullaniciAdi, mesaj, latitude, longtitude, tarihZaman
•
…
7
İlişkisel Veritabanı Dizayn Örneği - Dünya
•
SELECT name FROM cities WHERE id = 17;
•
INSERT INTO countries(code, name, independence_year, gnp) VALUES ('TUR', 'TURKEY', 1923,
10000.0);
•
SELECT name, gnp FROM countries WHERE gnp > 2000000;
•
SELECT * FROM cities WHERE code = ‘USA' AND population >= 2000000;
•
SELECT code, name, population FROM countries WHERE name LIKE 'United%';
8
İlişkisel Veritabanı Dizayn Örneği - Dersler
•
Herkes tek basina yazsin;
•
Yukaridaki students tablosundan Lisanin email adresini alan SELECT
•
Grades tablosundan student_id 888 olan course_id ler
•
Students ve Grades tablolarini birlestirerek (join) ile Lisanin gradeleri
9
İlişkisel Veritabanı - Tablo Yarat
CREATE TABLE students (
id INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
email VARCHAR(32),
password VARCHAR(16) NOT NULL DEFAULT "12345" );
•NOT
NULL
•PRIMARY
KEY / UNIQUE
•AUTO_INCREMENT
•UNSIGNED
10
İhtiyacınız olan veriler için SQLite da tabloları oluşturun
•
SQLite browseri indirin
•
Create Database ile yeni bir DB dosyası oluşturun ve ismi ‘ProjeIsmi’DB.sqlite
olsun
•
Belirtmiş olduğunuz herbir veri grubu için bir ‘CreateTable’ ile tablo oluşturun
11
İlişkisel Veritabanı - Ekle, Güncelle ve Sil
Kayıt Eklemek:
INSERT INTO table (columnName, ..., columnName) VALUES (value, value, ..., value);
INSERT INTO students(
Kayıt Güncellemek:
UPDATE table
SET column1 = value1, ..., columnN = valueN
WHERE condition;
UPDATE students SET email = “[email protected]" WHERE id = 888;
Kayıt Sil:
DELETE FROM table WHERE condition;
DELETE FROM students WHERE id = 888;
12
İhtiyacınız olan veri örneklerini girin
•
Oluşturduğunuz her tablo için 3 örnek veri girin.
13
Tablo yapısı ve içeriğini dışa altarın
•
File - Export seçeneğini kullanın ve oluşturulan dosyayı inceleyin
14
İhtiyacınız olan SELECT ve INSERT leri yazın
•
Her grup birlikte çalışarak appnizdeki her sayfayı göz önüne alın
•
Her sayfa için SELECT leri listeleyin
•
Her sayfa için INSERT leri listeleyin
•
UPDATE ve DELETE ihtiyacınız var mı?
15
Veritabanında Saklama
•
Appde oluşturduğunuz her veritabanına app içindeki bütün class lardan erişilebilir
fakat app dışından erişilemez.
•
SQlite veritabanı iç saklama biriminde saklanır
•
Yeni bir veritabanını oluşturmanın tavsiye edilen yöntemi SQLiteOpenHelper
sınıfının alt sınıfını oluşturmak
•
Yeni bir DB oluşturup bu DB ile çalışabiliriz.
•
•
Web sitesinden indirebileceğiniz SQLiteDB2 örneğinde olduğu gibi.
•
SQLiteOpenHelper alt sınıfında onCreate() metodunu yazılır ve onCreate()
metodu içinde veritabanındaki tabloları oluşturmak için SQLite komutları
kullanılır.
Önceden hazırladığımız bir DB kullanabiliriz.
•
Web sitesinden indirebileceğiniz SQLiteDB4 örneğinde olduğu gibi.
16
Veritabanında Saklama
•
Kodumuzun içinde SQLiteOpenHelper alt sınıfının bir nesnesini constructorını
kullanarak oluşturuyoruz.
•
Veritabanına yazmak için getWritableDatabase(), okumak için
getReadableDatabase() metodlarını çağırırız. Bunların ikisi de SQLiteDatabase
nesnesi döndürür ve SQLite operasyonları için metodlar sunar.
•
Birlikte SQLiteDatabase inin sunduğu metodları inceleyelim
•
http://developer.android.com/reference/android/database/sqlite/SQLiteDatabas
e.html
17
Android - SQLiteDatabase
SQLiteDatabase db = openOrCreateDatabase( "name", MODE_PRIVATE, null);
db.execSQL("SQL query");
Metodlar:
– db.beginTransaction(),db.endTransaction()
– db.delete(“table","whereClause",args)
– db.deleteDatabase(file)
– db.insert("table",null,values)
– db.query(…)
– db.rawQuery(“SQLquery”,args)
– db.replace(“table",null,values)
– db.update("table",values,"whereClause",args)
18
Var olan veritabanını kullanma
Veri tabanını koyacağımız asset klasörünü oluştururuz.
App indirildiğinde app paketinde asset klasörü içindedir ama ilk çalıştırmada cihazınızda bundan sonra
her çalıştırılmada kullanılacağı ve veritabanına yazmayı mümkün kılan yere kopyalanır.
CheckDatabase ve copyDataBase metodlarını inceleyin
19
Veri tabanınızı projeye ekleyin
•
Yaptıklarınızı, adım adım, tek tek not alın!
•
Web sitesinden SQLite4 örnek projeyi indirin ve çalışma ortamınıza import edin.
•
asset klasörüne veritabanınızı koyun
•
DBHelper sınıfının içinde DB_NAME i kendi veritabanı isminizle güncelleyin.
•
insertCountry ve getAllCountries metodlarını inceleyin
•
Daha önce belirlediğiniz SELECT ve INSERT lere göre ihtiyacınız olan metodları
içi boş olacak şekilde DBHelper sınıfına yazın.
20
Veri tabanınızı projeye ekleyin
•
Yaptıklarınızı tek tek, adım adım not alın!
•
SQLiteDB4 örneğindeki Country sınıfını inceleyin
•
Veritabanınızdan veri alıp verdiğiniz SELECT-INSERT ile kullanılan tablolar için
sınıf oluşturacağız.
21
Android - ContentValues
INSERT, UPDATE, REPLACE lerde kullanılmak üzere bir soyutlama ve kolaylık
getirir. Aşağıdaki yöntemleri karşılaştırabilirsiniz.
ContentValues cvalues = new ContentValues();
cvalues.put("columnName1", value1);
cvalues.put("columnName2", value2);
db.insert("tableName", null, cvalues);
ContentValues olmadan:
db.execSQL("INSERT INTO tableName (“ + columnName1 + ", " + columnName2 +
") VALUES (" + value1 + ", " + value2 + ")");
22
Veritabanından Veri Alma - Cursor
•
Her SQLite sorgusu bir Cursor döndürür. Bu cursor sorgu tarafından bulunan
bütün satırlara işaret eder. Cursor mekanizması sorgu tarafından döndürülen
satırlara satır satır erişmeyi sağlayan bir mekanizma sunar.
•
Birlikte SQLiteDatabase inin sunduğu metodları inceleyelim
•
http://developer.android.com/reference/android/database/sqlite/SQLiteDatabas
e.html
23
Android - Cursor
Cursor, sonuç kümede satır satır ilerlemeye yarar.
Cursor cursor = db.rawQuery("SELECT * FROM students");
cursor.moveToFirst();
do {
int id = cursor.getInt(cursor.getColumnIndex("id"));
String email = cursor.getString(cursor.getColumnIndex("email"));
...
} while (cursor.moveToNext());
cursor.close();
Diğer metodlar:
getBlob(index),getColumnCount(),getColumnIndex(name), getColumnName(index), getCount(),
getDouble(index), getFloat(index), getInt(index), getLong(index), getString(index), moveToPrevious(), ...
24
SQlite - Örnek
Örnek appnin kaynağı:
https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-401/veritabani-kullanimi
25
Kişisel Bonus Ödevi
App Inventor araştırması:
•
•
Gelecek hafta
•
App Inventor hakkında detaylı bilgi (en az 3 sayfa),
•
App Inventor hakkında bulduğunuz ve beğendiğiniz en az 10 türkçe kaynak
listesi,
Sonraki hafta
•
Beğendiğiniz App Inventor örneği ve açıklaması
26
Haftaya Okuma Ödevi
Android Appde map kullanımı:
•
https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-301/androidde-haritalarservisi
•
http://yesilcin.com/android-programlama-konum-bulma-ve-map-islemleri-t11007.0.html
•
http://melihmucuk.com/android-programlama-konum-bulma-ve-map-islemleri/
ingilizce:
•
https://developer.android.com/guide/topics/location/index.html
•
http://mobiforge.com/design-development/developing-with-google-maps-v2-android
•
http://www.vogella.com/tutorials/AndroidGoogleMaps/article.html
•
http://code.tutsplus.com/tutorials/android-sdk-working-with-google-maps-application-setup-mobile-15771
27
Kaynaklar
•
File storage:
•
https://developer.android.com/training/basics/data-storage/files.html
•
Android API: http://developer.android.com/reference/packages.html
•
https://developer.android.com/tools/help/adb.html#sqlite
•
Stanford Android Development Course
•
•
http://web.stanford.edu/class/cs193a/lectures.shtml
Udacity - Developing Android Apps (Google tarafından)
•
https://www.udacity.com/course/viewer#!/c-ud853/l-1395568821/m1643858569
28
Sorularınız?
29
Download