在Android中将不同表中的行显示到一个ListView-无需SQL连接
我是Android编程的超级新手,我一直在做这个项目 我有一个(conlang)词典数据库,每种语言都在它自己的表中。用户搜索这些,结果将显示在ListView中。现在,我只能搜索一个表 我希望它能够搜索所有三个表,并在一个ListView中显示结果,其中包含每个表中的行。我想指出每一行来自哪个表。结果将显示如下内容: 来自语言 英语术语 补充资料 我已经设置了一个游标适配器,目前正在为三个表中的一个工作 由于词典的来源不同,它们有不同的信息。例如: 其中一列有在Android中将不同表中的行显示到一个ListView-无需SQL连接,android,database,android-listview,android-cursor,Android,Database,Android Listview,Android Cursor,我是Android编程的超级新手,我一直在做这个项目 我有一个(conlang)词典数据库,每种语言都在它自己的表中。用户搜索这些,结果将显示在ListView中。现在,我只能搜索一个表 我希望它能够搜索所有三个表,并在一个ListView中显示结果,其中包含每个表中的行。我想指出每一行来自哪个表。结果将显示如下内容: 来自语言 英语术语 补充资料 我已经设置了一个游标适配器,目前正在为三个表中的一个工作 由于词典的来源不同,它们有不同的信息。例如: 其中一列有EngTerm,VLangTer
EngTerm
,VLangTerm
,FullDefinition
另一个有EngTerm
,RLangTerm
,部分语音
另一个有EngTerm
,GLangTerm
,部分语音,
和发音指南
(可能)
例如,表1可能包含“陆地”、“起落架”和“景观”的结果,表2可能包含“陆地”、“着陆”和“岛屿”,表3可能包含“平淡”和“家园”
用户现在可以搜索这些表格,只需按英文术语搜索,并且可以选择按完整单词或部分单词匹配
由于它们是如何构造的,我猜没有办法进行连接查询
我不知道这是否有帮助,但现在,我在我的SQLiteOpenHelper类中有了这个方法:
public Cursor searchDictionaryByEnglish
(boolean matchFullWordOnly, String searchTerm) {
String sql = "SELECT * FROM " + TABLE_VULCAN +
" WHERE " + COLUMN_ALL_ENG_TERM + " MATCH ?";
if (!matchFullWordOnly)
searchTerm = "*" + searchTerm + "*";
return mDataBase.rawQuery(sql, new String[]{searchTerm});
}
(它正在搜索的是一个FTS3表,因此是匹配的,而不是相似的。)
我希望我已经清楚地表明了我想要实现的目标,但我不确定从哪里开始。我已经找到了一些关于MergeCursor的答案,但由于列的数量和名称不同,我不知道如何应用它。创建一个适配器,它接受您需要显示的字段。创建一个适配器,它接受您需要显示的字段。创建一个适配器,它接受您需要显示的字段显示。创建一个适配器,该适配器接受您需要显示的字段。下面介绍如何进行联合。如果其中一个表中没有一列,则只搜索所有表都具有的公共列,则该方法将有效
SELECT field1 ,
field2 ,
field3
FROM ( SELECT field1 ,
field2 ,
field3
FROM table1
UNION
SELECT field1 ,
field2 ,
field3
FROM table2
UNION
SELECT field1 ,
field2 ,
NULL AS field3
FROM table3
) tbl
WHERE tbl.field1 LIKE '%search_string%'
请注意上一个
联合中的NULL AS字段3
这里介绍了如何进行联合如果其中一个表中没有一个列,那么如果您只搜索所有表都有的公共列,那么它将起作用
SELECT field1 ,
field2 ,
field3
FROM ( SELECT field1 ,
field2 ,
field3
FROM table1
UNION
SELECT field1 ,
field2 ,
field3
FROM table2
UNION
SELECT field1 ,
field2 ,
NULL AS field3
FROM table3
) tbl
WHERE tbl.field1 LIKE '%search_string%'
请注意上一个联合中的NULL AS字段3
这里介绍了如何进行联合如果其中一个表中没有一个列,那么如果您只搜索所有表都有的公共列,那么它将起作用
SELECT field1 ,
field2 ,
field3
FROM ( SELECT field1 ,
field2 ,
field3
FROM table1
UNION
SELECT field1 ,
field2 ,
field3
FROM table2
UNION
SELECT field1 ,
field2 ,
NULL AS field3
FROM table3
) tbl
WHERE tbl.field1 LIKE '%search_string%'
请注意上一个联合中的NULL AS字段3
这里介绍了如何进行联合如果其中一个表中没有一个列,那么如果您只搜索所有表都有的公共列,那么它将起作用
SELECT field1 ,
field2 ,
field3
FROM ( SELECT field1 ,
field2 ,
field3
FROM table1
UNION
SELECT field1 ,
field2 ,
field3
FROM table2
UNION
SELECT field1 ,
field2 ,
NULL AS field3
FROM table3
) tbl
WHERE tbl.field1 LIKE '%search_string%'
请注意上一个联合体中的空字段3
为什么不尝试使用联合体?我将如何使用联合体?不过,我认为这可能不适用,因为“要使用UNION,每个SELECT必须具有相同数量的选定列、相同数量的列表达式、相同的数据类型,并且具有相同的顺序,但它们不必具有相同的长度。”为什么不尝试使用UNION?我将如何使用UNION?不过,我认为这可能不适用,因为“要使用UNION,每个SELECT必须具有相同数量的选定列、相同数量的列表达式、相同的数据类型,并且具有相同的顺序,但它们不必具有相同的长度。”为什么不尝试使用UNION?我将如何使用UNION?不过,我认为这可能不适用,因为“要使用UNION,每个SELECT必须具有相同数量的选定列、相同数量的列表达式、相同的数据类型,并且具有相同的顺序,但它们不必具有相同的长度。”为什么不尝试使用UNION?我将如何使用UNION?但我认为它可能不适用,因为“要使用UNION,每个SELECT必须具有相同数量的选定列、相同数量的列表达式、相同的数据类型,并且具有相同的顺序,但它们不必具有相同的长度。”