具有相同列名的两个表的Android内容提供程序

时间:2012-12-18 14:14:52

标签: android android-contentprovider

我正在编写一个包含几个表的Android内容提供程序。假设我们有一个名为testData的表和一个名为testDataInspector的表。在testData中,我们有一个名为createdDate的列,在testDataInspector中,我们有另一个列名为createdDate。我发现在内容提供程序中,当已有testData.createdDate时,SDK无法找到名为testDataInspector.createdDate的列。我发现我需要在列名中添加表名前缀,以便区分表中的不同列名。当我想查询testDataInspector的contentProvider时,它不会在不同的表中找到两个同名的列名。我有正确的URI并正确使用URI匹配器。我的插页工作正常。

示例:

(表testData)

int creatorId = c.getColumnIndex(TestDataMetaData.CREATOR_ID_COLUMN_NAME);
int createdDate = c.getColumnIndex(TestDataMetaData.CREATED_DATE_COLUMN_NAME);

(对于表testDataInspector)

int formName = c.getColumnIndex(TestDataInspectorMetaData.FORM_NAME_COLUMN_NAME);
int data = c.getColumnIndex(TestDataInspectorMetaData.DATA_COLUMN_NAME);
int creatorId = c.getColumnIndex(TestDataInspectorMetaData.CREATOR_ID_COLUMN_NAME);
int createdDate = c.getColumnIndex(TestDataInspectorMetaData.TESTDATA_CREATED_DATE_COLUMN_NAME);

还有其他人遇到过这个吗?我想知道它是否与SQLite内部的指针有关。在任何大于2.2的SDK版本中编译应用程序时,我发现这是真的。我意识到ContentProviders主要用于,但一次只能用于一个表的规则。

我遇到的另一个问题是它是否与ContentProvider本身中ProjectionMap中的列别名的方式有关。我过去曾与内容提供商合作过,但通常他们只有一张桌子。我目前所处的项目需要一个相当广泛的数据库,与过去的习惯相比。任何有关这个问题的帮助都会有所帮助,因为我找到了一个修复工具,无法花时间玩这些问题。

1 个答案:

答案 0 :(得分:0)

好的,这是我的错。我道歉。这确实与内容提供商中的Projections Map有关。我没有在哈希映射中为列名添加正确的别名。我为创造任何问题而道歉。为了引用c,我正在Activity中进行托管查询,因为我正在开发一个简单的客户端应用程序来访问内容提供者。