2010-02-26 23 views
5

Tôi đã kiểm tra ví dụ NotesDbAdapter và tôi nhận thấy rằng chỉ dành cho một bảng duy nhất. (ghi chú)Ví dụ NotesDbAdapter dành cho một bảng, có bao nhiêu bảng?

1) Tôi tự hỏi làm thế nào điều này sẽ được thực hiện cho nhiều bảng? Ví dụ tôi có 3 bảng bây giờ. Làm thế nào tôi sẽ xử lý tất cả các nâng cấp, lấy, xóa từ ba bảng?

2) Tôi thấy đặc tính được xác định cho các cột bảng

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

Làm thế nào bạn sẽ xác định các cột cho một tình huống bàn nhiều?

Trả lời

6

Đối với ứng dụng của tôi, tôi tạo ra một lớp học để xác định cơ sở dữ liệu:

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 }; 
    } 
} 

Và 2 kịch bản sql để tạo và cập nhật các db res/raw/db_create.sqlres/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 

Và Một lớp khác để tạo/cập nhật/truy cập cơ sở dữ liệu tương tự như NotesDbAdapter ngoại trừ nó sử dụng tập lệnh sql để tạo/cập nhật cơ sở dữ liệu thay vì hằng số. (xem here để xem cách thực hiện điều đó)

+0

Sự kiện onUpgrade kích hoạt một lần cho tất cả cơ sở dữ liệu hoặc cháy riêng cho từng lớp bảng? – Pentium10

+0

'onUpgrade()' được kích hoạt khi Android phát hiện rằng 'DATABASE_VERSION' đã được tăng lên. Bạn có thể làm những gì bạn muốn bên trong. Chủ yếu là bạn xóa tất cả các bảng (xem kịch bản lệnh db_update.sql) và gọi 'onCreate()' để tạo lại cơ sở dữ liệu. – tbruyelle

+0

Không nên tạo 1 MyApplicationDb và một vài lớp Table1 mới cho mỗi bảng? Trong C#, tôi đã tạo một lớp cho mỗi bảng mà tôi có, và tôi chưa bao gồm một adapter. – Pentium10

Các vấn đề liên quan