Sonuç bulunamadı
Bütün Sonuçları Göster
Teknoloji tutkunu Technopatların ortak adresi: Technopat.net
  • Haber
  • Yapay Zeka
  • Tavsiyeler
  • Oyun
  • Video
  • Teknoloji
    • Mobil
    • Yazılım
    • Elektronik Alışveriş Fırsatları
    • Pratik
    • Ev Teknolojileri
    • Makale
    • Güvenlik
    • Ekonomi
    • İnternet
    • Giyilebilir Teknoloji
    • Sağlık
    • Yazıcı
    • Sosyal Medya
    • Otomobil
      • Elektrikli Otomobil
  • Sosyal
Teknoloji tutkunu Technopatların ortak adresi: Technopat.net
  • Haber
  • Yapay Zeka
  • Tavsiyeler
  • Oyun
  • Video
  • Teknoloji
    • Mobil
    • Yazılım
    • Elektronik Alışveriş Fırsatları
    • Pratik
    • Ev Teknolojileri
    • Makale
    • Güvenlik
    • Ekonomi
    • İnternet
    • Giyilebilir Teknoloji
    • Sağlık
    • Yazıcı
    • Sosyal Medya
    • Otomobil
      • Elektrikli Otomobil
  • Sosyal
Sonuç bulunamadı
Bütün Sonuçları Göster
Teknoloji tutkunu Technopatların ortak adresi: Technopat.net

Anasayfa - Makale - Pratik - Android Programlama Ders 40: INNER JOIN Ve rawQuery Metotları

Android Programlama Ders 40: INNER JOIN Ve rawQuery Metotları

18 Haziran 2014 - 12:00
- Makale, Mobil, Pratik

Android Programlama Ders 40′ta SQlite kullanarak iki tablodan sorgulama yapacağız ve sonucu bildirime yazdıracağız.

Basit bir uygulama oluşturalım. Uygulamamız iki tablodan (Tablolar: people ve position) sorgulama gerçekleştirecek. Birinci tabloda insanların listesi ve ikincide meslekleri listesi olacak. Her insan için people listesinde position tablosunda mesleğin id’si olacaktır.

Projeyi oluşturalım:

  • Project name: P0040_SQLiteInnerJoin
  • Build Target: Android 4.2
  • Application name: SQLiteInnerJoin
  • Package name: tr.example.sqliteinnerjoin
  • Create Activity: MainActivity

 

Bu proje için ekranı kullanmayacağız. Bu yüzden direkt MainActivity.java oluşturuyoruz.

MainActivity.java:

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {

  final String LOG_TAG = "myLogs";

  // meslek tablonun verileri
  int[] position_id = { 1, 2, 3, 4 };
  String[] position_name = { "Mudur", "Programci", "Muhasebeci", "Guvenlik" };
  int[] position_salary = { 15000, 13000, 10000, 8000 };

  // insan tablonun verileri
  String[] people_name = { "Ahmet", "Seyda", "Ali", "Omer", "Sevgi", "Umut", "Murat", "Mehmet" };
  int[] people_posid = { 2, 3, 2, 2, 3, 1, 2, 4 };

  /** Called when the activity is first created. */
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    DBHelper dbh = new DBHelper(this);
    SQLiteDatabase db = dbh.getWritableDatabase();

    Cursor c;

    // bildirime mesleklere ait verileri yazdiriyoruz
    Log.d(LOG_TAG, "--- Table position ---");
    c = db.query("position", null, null, null, null, null, null);
    logCursor(c);
    c.close();
    Log.d(LOG_TAG, "--- ---");

    // bildirime insanlara ait veriler yazdiriyoruz
    Log.d(LOG_TAG, "--- Table people ---");
    c = db.query("people", null, null, null, null, null, null);
    logCursor(c);
    c.close();
    Log.d(LOG_TAG, "--- ---");

    // birlestiren sorgudan sonucu aliyoruz
    // rawQuery kullaniyoruz
    Log.d(LOG_TAG, "--- INNER JOIN with rawQuery---");
    String sqlQuery = "select PL.name as Name, PS.name as Position, salary as Salary "
        + "from people as PL "
        + "inner join position as PS "
        + "on PL.posid = PS.id "
        + "where salary > ?";
    c = db.rawQuery(sqlQuery, new String[] {"12000"});
    logCursor(c);
    c.close();
    Log.d(LOG_TAG, "--- ---");

    // birlestiren sorgudan sonucu aliyoruz
    // query kullaniyoruz
    Log.d(LOG_TAG, "--- INNER JOIN with query---");
    String table = "people as PL inner join position as PS on PL.posid = PS.id";
    String columns[] = { "PL.name as Name", "PS.name as Position", "salary as Salary" };
    String selection = "salary < ?";
    String[] selectionArgs = {"12000"};
    c = db.query(table, columns, selection, selectionArgs, null, null, null);
    logCursor(c);
    c.close();
    Log.d(LOG_TAG, "--- ---");
   
    // veri tabani kapatiyoruz
    dbh.close();
  }

  // cursordan bildirime verileri cikartiyoruz
  void logCursor(Cursor c) {
    if (c != null) {
      if (c.moveToFirst()) {
        String str;
        do {
          str = "";
          for (String cn : c.getColumnNames()) {
            str = str.concat(cn + " = " + c.getString(c.getColumnIndex(cn)) + "; ");
          }
          Log.d(LOG_TAG, str);
        } while (c.moveToNext());
      }
    } else
      Log.d(LOG_TAG, "Cursor is null");
  }

  // veri tabaniyla calismak icin klasi olusturuyoruz
  class DBHelper extends SQLiteOpenHelper {

    public DBHelper(Context context) {
      super(context, "myDB", null, 1);
    }

    public void onCreate(SQLiteDatabase db) {
      Log.d(LOG_TAG, "--- onCreate database ---");

      ContentValues cv = new ContentValues();

      // meslekler tabloyu olusturuyoruz
      db.execSQL("create table position ("
          + "id integer primary key,"
          + "name text," + "salary integer"
          + ");");

      // tabloyu dolduruyoruz
      for (int i = 0; i < position_id.length; i++) {
        cv.clear();
        cv.put("id", position_id[i]);
        cv.put("name", position_name[i]);
        cv.put("salary", position_salary[i]);
        db.insert("position", null, cv);
      }

      // insanlar tabloyu olusturuyoruz
      db.execSQL("create table people ("
          + "id integer primary key autoincrement,"
          + "name text,"
          + "posid integer"
          + ");");

      // dolduruyoruz
      for (int i = 0; i < people_name.length; i++) {
        cv.clear();
        cv.put("name", people_name[i]);
        cv.put("posid", people_posid[i]);
        db.insert("people", null, cv);
      }
    }

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

    }
  }

}

Kodu inceleyelim. İlk başta veri dizileri (position_id, position_name v.b.) belirtiyoruz.

onCreate metodunda veri tabanı yönetmek için nesneyi oluşturuyoruz ve veri tabanına bağlıyoruz. Sonraki aşamada query kullanarak bildirime iki tablonun (position ve people) verilerini yazdırıyoruz.

İki tablonun verilerini bildirime yazdırmak için rawQuery metodu kullanıyoruz. Bu metodda giriş olarak SQL sorguyu ve şart (Where eğer gerekiyorsa) argümanları kullanılıyor. Sorgulamamız insanın ismini, mesleğini ve maaşını sorguluyor. Şart olarak maaşı 12,000 üzeri olacak.

Sonraki aşamada iki tablonun verilerini bildirime yazdırmak için query kullanıyoruz. Bu sefer şart olarak maaş 12,000 (selectionArgs) altı olacak.

logCursor metodu giriş olarak kürsör (Cursor) alıyor ve içinde olanları bildirime aktarıyor.

DBHelper klasta tabloların oluşumunu ve doldurulmasını programlıyoruz.

Kaydedelim ve çalıştıralım. Bildirime bakalım:

— onCreate database —

—Table position —

id = 1; name = Mudur; salary = 15000;

id = 2; name = Programci; salary = 13000;

id = 3; name = Muhasebeci; salary = 10000;

id = 4; name = Guvenlik; salary = 8000;

— —

— Table people —

id = 1; name = Ahmet; posid = 2;

id = 2; name = Seyda; posid = 3;

id = 3; name = Ali; posid = 2;

id = 4; name = Omer; posid = 2;

id = 5; name = Sevgi; posid = 3;

id = 6; name = Umut; posid = 1;

id = 7; name = Murat; posid = 2;

id = 8; name = Mehmet; posid = 4;

— —

Tabloların verilerini ayrı çıkardık.

— INNER JOIN with rawQuery—

Name = Ahmet; Position = Programci; Salary = 13000;

Name = Ali; Position = Programci; Salary = 13000;

Name = Omer; Position = Programci; Salary = 13000;

Name = Umut; Position = Mudur; Salary = 15000;

Name = Murat; Position = Programci; Salary = 13000;

— —

rowQuery kullanarak 12,000 üzeri maaşı olanları çıkardık.

— INNER JOIN with query—

Name = Seyda; Position = Muhasebeci; Salary = 10000;

Name = Sevgi; Position = Muhasebeci; Salary = 10000;

Name = Mehmet; Position = Guvenlik; Salary = 8000;

— —

Query kullanarak 12,000 altı maaşı olanları çıkardık.

Ders Sonu Notları:

Gördüğünüz gibi SQLite sorgularının normal veri tabanından pek farkı yok. Hangi yöntemi (rawQuery veya query) kullanacağınız size kalıyor. Gelecek derste veri tabanında kullanılan işlemleri inceleyeceğiz.

Etiketler: AndroidAndroid programlama dersleridersINNER JOINlogCursorprogramlamarowQuerySQLitetechnopatteknolojiYazılımyeni
PaylaşPaylaşTweetYollaPaylaş
Victor Cuiumju

Victor Cuiumju

Yorum Yap Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

RSS Technopat Sosyal

  • Matepad 11.5 vs S10 Lite
  • EVGA supernova GT 850W 80+ Gold nasıldır?
  • 1.4-1.5 milyon civarına araç önerisi
  • Güç kaynağının kablosu yanlış takılırsa zarar görür mü?
  • Galaxy Tab S8+ teşhir olarak alınır mı?
  • 3.000 TL'ye VDSL Modem Önerisi
  • 60 bin TL Gaming laptop önerisi
  • 20-24 bin TL arası laptop önerisi
  • GTA 4 için mod önerisi
  • GTX 1060 3 GB, GTX 1050 Ti 4 GB'dan daha mı güçlü?

Technopat Video

Şu an oynayan

Apple Watch’u bambaşka bir seviyeye taşıyan 5 uygulama

Apple Watch’u bambaşka bir seviyeye taşıyan 5 uygulama

Apple Watch’u bambaşka bir seviyeye taşıyan 5 uygulama

Akıllı Saat
Huawei Watch GT 6 Pro

Apple’ı 20’ye katlayan saat! Huawei Watch GT 6 Pro incelemesi

Akıllı Saat
Technopat ofisi Eylül ayında neler aldı? 

Technopat ofisi Eylül ayında neler aldı? 

Giyilebilir Teknoloji

Teknoloji tutkunu Technopatların ortak adresi: Technopat.net!

Güncel teknoloji, internet, donanım, yazılım, oyun ve daha fazlası haber, makale ve videolar ile Technopat’ta sizlerle.


01010100 01100101 01100011 01101000 01101110 01101111 01110000 01100001 01110100

Kategoriler

  • Yapay Zeka
  • Ev Teknolojileri
  • Makale
  • Video

Sosyal Medya

Bağlantılar

  • Hakkında
  • Haber
  • Video
  • Sosyal
  • Çerez Politikası
© 2011-2025 Technopat. Tüm Hakları Saklıdır.
Netse
Çerez Onayı
Web sitemizi ziyaret ettiğinizde, kullanıcı deneyiminizi daha iyi hale getirmek, hizmetlerimizi size daha etkin bir şekilde sunabilmek için çerezler (cookies) ve benzeri araçlar kullanıyoruz. Çerezler, internet sitesinin düzgün çalışmasını sağlamak, içeriği kişiselleştirmek, sosyal medya özellikleri sağlamak ve trafik analizi yapmak için kullanılan küçük metin dosyalarıdır. Çerezleri nasıl kullandığımız ve kişisel verilerinizi nasıl işlediğimiz hakkında daha fazla bilgi almak için çerez politikamızı ve kişisel veri politikamızı inceleyebilirsiniz.
Fonksiyonel Her zaman aktif
Teknik depolama veya erişim, sadece kullanıcının açıkça talep ettiği belirli bir hizmetin kullanılmasını sağlama amacıyla veya iletişimin elektronik iletişim ağı üzerinden iletilmesinin tek amacıyla yasal olarak kesinlikle gereklidir.
Tercihler
Teknik depolama veya erişim, abone veya kullanıcı tarafından istenmeyen tercihlerin depolanması yasal amacıyla gereklidir.
İstatistikler
Sadece istatistiksel amaçlarla kullanılan teknik depolama veya erişim. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Pazarlama
Teknik depolama veya erişim, reklam gönderimi için kullanıcı profilleri oluşturmak veya kullanıcıyı bir web sitesinde veya birden fazla web sitesinde benzer pazarlama amaçları için takip etmek amacıyla gereklidir.
Seçenekleri yönet Hizmetleri yönetin {vendor_count} satıcılarını yönetin Bu amaçlar hakkında daha fazla bilgi edinin
Tercihleri yönet
{title} {title} {title}
Onayı Yönet
En iyi deneyimleri sunmak için, cihaz bilgilerini saklamak ve/veya bunlara erişmek amacıyla çerezler gibi teknolojiler kullanıyoruz. Bu teknolojilere izin vermek, bu sitedeki tarama davranışı veya benzersiz kimlikler gibi verileri işlememize izin verecektir. Onay vermemek veya onayı geri çekmek, belirli özellikleri ve işlevleri olumsuz etkileyebilir.
Fonksiyonel Her zaman aktif
Teknik depolama veya erişim, abone veya kullanıcı tarafından açıkça talep edilen belirli bir hizmetin kullanılmasını sağlamak veya bir elektronik iletişim ağı üzerinden bir iletişimin iletimini gerçekleştirmek amacıyla meşru bir amaç için kesinlikle gereklidir.
Tercihler
Teknik depolama veya erişim, abone veya kullanıcı tarafından talep edilmeyen tercihlerin saklanmasının meşru amacı için gereklidir.
İstatistik
Sadece istatistiksel amaçlar için kullanılan teknik depolama veya erişim. Sadece anonim istatistiksel amaçlar için kullanılan teknik depolama veya erişim. Mahkeme celbi, İnternet Hizmet Sağlayıcınızın gönüllü uyumu veya üçüncü bir taraftan ek kayıtlar olmadan, yalnızca bu amaçla depolanan veya alınan bilgiler genellikle kimliğinizi belirlemek için kullanılamaz.
Pazarlama
Teknik depolama veya erişim, reklam göndermek için kullanıcı profilleri oluşturmak veya benzer pazarlama amaçları için kullanıcıyı bir web sitesinde veya birkaç web sitesinde izlemek için gereklidir.
Seçenekleri yönet Hizmetleri yönetin {vendor_count} satıcılarını yönetin Bu amaçlar hakkında daha fazla bilgi edinin
Tercihleri görüntüle
{title} {title} {title}
Sonuç bulunamadı
Bütün Sonuçları Göster
  • Giriş
  • Teknoloji Haberleri
  • Sosyal
  • Video
  • Tavsiyeler
  • İncelemeler
    • Video İncelemeler
  • Güvenlik
  • Oyun
  • Makale
    • Pratik
    • Yazar Köşeleri

© 2025 Technopat
Sorularınız için Technopat Sosyal