在Android中将不同表中的行显示到一个ListView-无需SQL连接

在Android中将不同表中的行显示到一个ListView-无需SQL连接,android,database,android-listview,android-cursor,Android,Database,Android Listview,Android Cursor,我是Android编程的超级新手,我一直在做这个项目 我有一个(conlang)词典数据库,每种语言都在它自己的表中。用户搜索这些,结果将显示在ListView中。现在,我只能搜索一个表 我希望它能够搜索所有三个表,并在一个ListView中显示结果,其中包含每个表中的行。我想指出每一行来自哪个表。结果将显示如下内容: 来自语言 英语术语 补充资料 我已经设置了一个游标适配器,目前正在为三个表中的一个工作 由于词典的来源不同,它们有不同的信息。例如: 其中一列有EngTerm,VLangTer

我是Android编程的超级新手,我一直在做这个项目

我有一个(conlang)词典数据库,每种语言都在它自己的表中。用户搜索这些,结果将显示在ListView中。现在,我只能搜索一个表

我希望它能够搜索所有三个表,并在一个ListView中显示结果,其中包含每个表中的行。我想指出每一行来自哪个表。结果将显示如下内容:

来自语言

英语术语

补充资料

我已经设置了一个游标适配器,目前正在为三个表中的一个工作

由于词典的来源不同,它们有不同的信息。例如:

其中一列有
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必须具有相同数量的选定列、相同数量的列表达式、相同的数据类型,并且具有相同的顺序,但它们不必具有相同的长度。”