2010-02-26 24 views
5

NotesDbAdapter örneğini kontrol ettim ve bunun tek bir tablo için olduğunu fark ettim. (not)NotesDbAdapter örneği bir tablo için, birden fazla tabloya ne dersiniz?

1) Birden fazla tablo için nasıl yapıldığını merak ediyorum. Örneğin, şimdilik 3 tablo var. Bu üç tablodan tüm yükseltme, getirme, silme işlemlerini nasıl ele alabilirim?

2) Ben

public static final String KEY_TITLE = "title"; 
public static final String KEY_BODY = "body"; 
public static final String KEY_ROWID = "_id"; 

Nasıl bir çoklu masa durum için sütunları tanımlamak olacaktır tablo sütunları için tanımlanmış özellikleri görmek? Benim uygulama için

cevap

6

Ben veritabanını tanımlamak için bir sınıf oluşturuldu:

public final class MyApplicationDb 
{ 
    public static String DATABASE_NAME = "my_application_db"; 
    public static int DATABASE_VERSION = 1; 

    public static final class Table1 
    { 
     public static String TABLE_NAME = "table1"; 
     public static String ID = "_id"; 
     public static String DAY = "day"; 
     public static String NAME = "name"; 
     public static String SOURCE = "source"; 
     public static String[] COLUMNS = { ID, DAY, NAME, SOURCE }; 
    } 
    public static final class Table2 
    { 
     public static String TABLE_NAME = "table2"; 
     public static String ID = "_id"; 
     public static String CONTACT_ID = "contactId"; 
     public static String CONTACT_NAME = "contactName"; 
     public static String LAST_WISH_DATE = "lastWishDate"; 
     public static String[] COLUMNS = { ID, CONTACT_ID, CONTACT_NAME, LAST_WISH_DATE }; 
    } 
} 

Ve db res/raw/db_create.sql ve res/raw/db_update.sql

/* db_create.sql */ 
create table table1(
    _id integer primary key autoincrement, 
    day char(5) not null, 
    name varchar(64) not null, 
    source varchar(64) not null); 
create table table2(
    _id integer primary key autoincrement, 
    contactId integer not null, 
    contactName text not null, 
    lastWishDate char(10) null); 


/* db_update.sql */ 
DROP TABLE IF EXISTS table1; 
DROP TABLE IF EXISTS table2 

oluşturma ve güncelleme için 2 sql komut Vebenzeri bir veritabanını oluşturma/güncelleştirme/veritabanına erişme için başka bir sınıfhariç, sabitler yerine veritabanını oluşturmak/güncelleştirmek için sql komut dosyasını kullanır. (bunun nasıl yapıldığını görmek için here'a bakın)

+0

OnUpgrade olayı tüm veritabanı veya yangınlar için her tablo sınıfı için ayrı ayrı bir kez mi patlar? Android, "DATABASE_VERSION" öğesinin artırıldığını algıladığında – Pentium10

+0

'onUpgrade()' tetiklenir. İçinde istediğin şeyi yapabilirsin. Çoğunlukla tüm tabloları silersiniz (bkz. Db_update.sql betiği) ve veritabanını yeniden oluşturmak için 'onCreate()' ı çağırınız. – tbruyelle

+0

Tablonun her biri için 1 MyApplicationDb ve birkaç yeni Table1 sınıfı oluşturması önerilmez. C# 'da sahip olduğum her tablonun bir sınıfını yarattım ve bir adaptöre sarılmamıştım. – Pentium10

İlgili konular