当前位置: 首页 > 面试题库 >

带有WHERE子句的UNION-Android Eclipse

端木桐
2023-03-14
问题内容

我正在使用UNION创建一个搜索界面来搜索多个表。我的问题是,当我尝试搜索单词时,最后一个表中的数据是唯一不断出现的东西。如何在条件适当的地方正确搜索表,应根据其首字母搜索名称。

这是我的代码:

@Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub

            if (searchText.getText().toString().length() > 0) {
                cursor = db.rawQuery("SELECT _id AS _id, name AS name, desc AS desc FROM comm_acc  WHERE name LIKE ?" +
                        " UNION SELECT _id AS _id, name AS name, desc AS desc FROM comm_filems  WHERE name LIKE ? " +
                        "UNION SELECT _id AS _id, name AS name, desc AS desc FROM comm_psu  WHERE name LIKE ? " +
                        "UNION SELECT _id AS _id, name AS name, desc AS desc FROM comm_shells  WHERE name LIKE ? " +
                        "UNION SELECT _id AS _id, name AS name, desc AS desc FROM comm_sic  WHERE name LIKE ? " +
                        "UNION SELECT _id AS _id,name AS name, desc AS desc FROM comm_stp WHERE name LIKE ?", 
                        new String[]{searchText.getText().toString() + "%"});
                adapter = new SimpleCursorAdapter(
                getActivity(), 
                R.layout.search_command_list_item, 
                cursor, 
                new String[] {"name", "desc"}, 
                new int[] {R.id.commandName, R.id.commandDesc}, 0);
                setListAdapter(adapter);

                }
                else {

                }

        }



    });

}

问题答案:

未使用的参数的值为NULL。只有comm_acc表实际进行搜索。

您必须为查询提供六个参数:

String searchPattern = searchText.getText().toString() + "%";
cursor = db.rawQuery("SELECT ... ? ... ? ... ? ... ? ... ? ... ? ...",
                     new String[]{ searchPattern, searchPattern, searchPattern,
                                   searchPattern, searchPattern, searchPattern });

或在所有LIKE中使用相同的参数:

cursor = db.rawQuery("          SELECT ... name LIKE ?1 " +
                     "UNION ALL SELECT ... name LIKE ?1 " +
                     ...
                     "UNION ALL SELECT ... name LIKE ?1",
                     new String[]{ searchText.getText().toString() + "%" });


 类似资料:
  • 例如,我想做这样的事情: 新建Select().from(Table).where(“id in?”,list).execute()

  • 问题内容: 是否可以在WHERE子句中使用LIMIT x? 如果是这样,怎么办? 我正在尝试这样做: 但我收到以下错误: 问题答案: 应该在之后。 句法 :

  • 问题内容: 我将如何在没有硬编码值的情况下编写此sql语句? 宁愿有这样的事情: 提前致谢.. 问题答案: 用您当前的方式构造SQL查询是一个糟糕的主意,因为它为各种SQL注入攻击打开了大门 。为了正确执行此操作,您必须改为使用“ 预备语句”。这也将解决您目前显然遇到的各种逃避问题。 请注意,这是一个昂贵的调用(除非您的应用程序服务器使用语句缓存和其他类似的功能)。从理论上讲,最好先准备一次语句,

  • 问题内容: 我有两张桌子。 我这样查询: 我使用UNION是因为如果用户在第一个表和第二个表中都存在,我想为每个用户获取不同的值。 例如: 如果peter在任何一张桌子上,我应该一次获得名称,因为它在两个桌子上都存在。 我仍然从第一张桌子得到一排,从第二张桌子得到第二排。怎么了? 任何帮助表示赞赏。 问题答案: 您的SQL有两个问题: (这是 不是 问题,但应考虑)使用过,而不是表,您创建性能噩梦

  • 问题内容: 我有一个包含多个搜索条件的搜索页面 员工姓名 员工ID 入职日期 部门 等等 用户可以提供一个或多个搜索条件。我需要查询数据库以获取搜索结果。 使用纯JDBC,有两种方法可以实现此目的。 通过附加用户提供的搜索条件来准备SQL查询。 例如: 使用 例如: 此答案说明,像上面的ex 1一样,可以修改ex2,如下所示 然后仔细地(牢记参数索引)将输入设置为准备好的语句。听起来这不是一个非常

  • 问题内容: 我有以下SQL代码(这是到目前为止我得到了多少): 以下是VIEW_1的定义: 但是我收到以下错误消息: 是什么导致错误?在哪里更改代码以使其起作用? 感谢您的帮助! 问题答案: 以我的经验,不仅在USING子句为MATCH表中的一行返回一行以上时,而且在无法 确定 仅返回一行(即使没有实际的行)时,也会返回此错误。返回多行的情况)。为了在这种情况下强制解析器接受查询,我通常会在MAT