占无限量的SQLite专栏?

时间:2010-12-25 20:40:33

标签: android sqlite foreign-keys

我正在尝试为一组联系人创建一个SQLite表,但我确实知道该表中的联系人数量,那么我怎么能解释所有联系人?我可以创建一个TEXT列,并使用分隔符获得每个联系人的String URI。我想支持运行Android 1.5的各种用户和(如果我错了,请纠正我)在Android 1.5上运行的SQLite版本不支持外键(仅限Android 2.2及更高版本)。我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以使用触发器模拟旧版Android上的外键约束:http://www.codeproject.com/KB/android/AndroidSQLite.aspx

从那里,您可以简单地为组创建另一个表(以及您希望与之关联的任何元数据),然后为联系人创建另一个表,并让每个联系人都有group_id,或者如果您希望每个联系人有多个组,还可以有另一个只包含contact_id和group_id的表。

所以,假设您想要一组联系人,并且您需要一组联系人组。并且您希望每个组包含可变数量的联系人,并且您希望联系人位于组的变量ammoun中,您将需要三个表,一个组表,一个联系表和一个groupcontact表。组表将包含组所需的所有列,以及一个额外的主键列(请注意,它必须被称为_id,因为android假定它将被称为_id)。联系表将包含联系人所需的所有列以及其他主键。最后,groupcontact表将有三列(尽管您只关心其中两列),主键列,group_id列和contact_id列。

最后,如果你想关联一个组的所有元素,包括所有的联系人,你可以这样做:

<group_fileds>, <contact_fields> from <group_table>, <contact_table>, <group_contact_table> where <group_table>._id = <groupid> and <contact_table>._id = <contactid>

来自groupcontact表的位置和来源。 (注意android有记事本示例中演示的方法:http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NotePadProvider.html,你也可以在我写的最近的提供程序中看到类似事情的例子(尽管有点简单)(尽管我还没有实现触发器,所以它在旧版本的android中无法正常工作):https://github.com/LeifAndersen/NetCatch/blob/master/src/net/leifandersen/mobile/android/netcatch/providers/ShowsProvider.java