2011-08-08 12 views
5

Uygulamalardaki veritabanlarını kullanmaktan oldukça deneyimsizim, bu yüzden biraz rehberliğe ihtiyacım var. Android'de SQLite dizilerinden oluşan bir koleksiyonu nasıl depolarsınız?

Birkaç ilkel alanları ve katarlar ve ArrayList nesneleri için çeşitli referanslarla bir Java nesnesi var. İlkeller ve Dizeler mevcut SQLite alanlarına güzel bir şekilde eşleşir, ancak ArrayLists'i nasıl kalıcı hale getirdiğimi bilmiyorum.

İki fikir eğlendim, bunlardan biri ArrayListlerini serileştirmek ve bunları bir Metin alanında saklamak, diğeri ise tek tek dizeleri saklayabileceğim 1 numaralı bir tabloya işaret eden bir sütuna sahip olmak. ama androidde bunu nasıl yapacağımdan emin değilim. Farklı yaklaşımlara açığım, ama SQLiti kullanarak javada nasıl uygulanacağını bilmiyorum, bu yüzden bir çözüm güzel olurdu. Teşekkürler. Genellikle

cevap

7

(I öğrendiklerimi) Eğer kendisi diğer nesnelerin bir listesini içeren bir nesne, varsa, bu bir 1 için birçok (veya potansiyel birçok çoğa) ilişkisi olacaktır. Bu verileri saklamak için başka bir tablo kullanmak istersiniz. Diğer tabloda, nesne için birincil anahtarınız ve sonra ait olduğu ana nesneyi gösteren bir yabancı anahtar olacaktır. Daha iyi bir açıklama için this linkine bakınız.

Örnek:

CREATE TABLE User (
    _id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    name TEXT 

); 

CREATE TABLE UserPicture(
    _id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    userId INTEGER, 
    path TEXT 

FOREIGN KEY(userId) REFERENCES User(_id) 
); 

Şimdi veritabanına kaydederken her resmin üzerinde yineleme ve UserPicture içine her biri eklemek istediğiniz, sen userpictures bir List, bir kullanıcı nesnesi var demek Tabloyu, kullanıcı tablosuna geri bağlantı olarak userId kullanarak. Bir çok-çok ilişkinin durumda

, her nesne çocuklarının nesneler listesi olurdu. Bunun daha iyi bir örneği, Üyelik/Rol sistemidir. Bir Kullanıcı bir Rol Listesi'ne sahip olacaktır ve bir Kullanıcı bir Kullanıcı Listesine sahip olacaktır, çünkü bir kullanıcı birden fazla rolde (normalde) olabilir ve bir rolü de elbette çoklu kullanıcısı olabilir. Bu sadece bence bir tablo olarak adlandırılan şeyleri gerektirir. UserInRole, UserX ve RoleID, Kullanıcı X'ın Role Y.'ye ait olduğunu göstermek için iki sütuna sahip olur.

Bunu nasıl uygulayacağınız konusunda, 'Android sqlite eğitimi' için arama yapın. Here ve here, bir sqlite android veritabanı uygulamasının nasıl kurulacağına ilişkin eğitici iki bağlantıdır.

+0

Kısa bir örnek göndereceğim. – Jack

+0

Hata yok, ancak '' TEXT yolundan sonra 'eksik. – Weekend

9

diğer ayrıntıları bilmeden, ben bunu yapmak ders kitabı yolu dizi listesi için ikinci bir tablo oluşturmak için olduğunu söylemek ve sonra dizi listesinde birinci kaydın id içerebilir.

create table person (personid int, name varchar(30), age int); 
create table hobby (hobbyid int, personid int, description varchar(30)); 

Sonra veri aşağıdaki gibi görünebilir:

Person 
11 Bob 18 
12 Sally 68 
13 Ford 42 

Hobby 
21 11 fishing 
22 11 hunting 
23 12 needlepoint 
24 12 rock-climbing 
25 13 hitch-hiking 

almak için

Örneğin, nesne Böyle tabloları yaratacak

String name; 
int age; 
ArrayList<String> hobbies; 

oluşur varsayalım Herkesin hobileri listesi gibi bir sorgu kullanacaksınız:

select person.name, hobby.description 
from person 
join hobby on person.personid=hobby.personid 
İlgili konular