BIL4106 - MOBiL PROGRAMLAMA TEKNiKLERi Yard. Doç. Dr. Oğuzhan Topsakal oguzhantopsakal@uludag.edu.tr 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 = “lisasimpson@gmail.com" 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