为了账号安全,请及时绑定邮箱和手机立即绑定

如何在android中的数据库表的特定行中搜索字符串匹配

如何在android中的数据库表的特定行中搜索字符串匹配

不负相思意 2023-07-19 17:10:03
我正在构建一个应用程序并第一次处理数据库,我试图获取数据文本作为输入并在特定行中搜索其匹配项。我没能做到这一点。我已经选择了特定行。我有六列,并且根据 id 获得了特定行,但比较其他五列中的输入文本给出了有问题的输出。根据下面代码中给出的方法,它在与第一列或最后一列条目(但不是全部)进行比较后给出结果。    public Cursor finddata(String name,int ida, int guess){        String Query = "SELECT  NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME1='" +name+ "'";                    cursor=db.rawQuery(Query,null);                    check=1;                    if(cursor==null){                        String Query2 = "SELECT  NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME2='" +name+ "'";                        cursor=db.rawQuery(Query2,null);                        check=2;                    }                    if(cursor==null){                        String Query3 = "SELECT  NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME3='" +name+ "'";                        cursor=db.rawQuery(Query3,null);                        check=3;                    }                    if(cursor==null){                        String Query4 = "SELECT  NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME4='" +name+ "'";                        cursor=db.rawQuery(Query4,null);                        check=4;                    }                    if(cursor==null){                        String Query5 = "SELECT  NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME5='" +name+ "'";                        cursor=db.rawQuery(Query5,null);                        check=5;                    }                    if(cursor==null){                        String Query6 = "SELECT  NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME6='" +name+ "'";                        cursor=db.rawQuery(Query6,null);                    }                    return cursor;                    }我认为我在游标上应用的 if 条件存在一些错误“if(cursor==null)”,因为它只是通过比较第一个语句而不是 if 来给出答案,即使它在第一个语句中匹配或不。如果有一些直接查询语句可以做到这一点???我在互联网上搜索了很多但找不到解决方案。如果可以的话,请不要引导我回答已经回答的问题并回答这个问题。问候
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

你做错的是你检查Cursor返回的对象是否rawQuery()是null.

rawQuery()返回 a Cursor,它可能为空(没有任何行),但它永远不可能是null。您可以通过检查其方法

来检查是否有任何行。 也不要使用 sql 语句的参数串联。这是不安全的。 使用占位符和第二个参数来传递参数。 所以改成这样:CursormoveToFirst()


?rawQuery()


public Cursor finddata(String name, int ida, int guess){

    String sql = "SELECT NAME1 FROM Capital_Names " + 

        "WHERE ID = ? AND ? IN (NAME1, NAME2, NAME3, NAME4, NAME5)";

    return db.rawQuery(sql, new String[] {ida, name});

您的代码中似乎没有使用guess的参数finddata(),因此您可以将其删除。

另外您确定只想返回该列NAME1吗?您可以将其替换为"SELECT * FROM..."以返回所有列。


查看完整回答
反对 回复 2023-07-19
?
呼如林

TA贡献1798条经验 获得超3个赞

public Cursor finddata(String name,int ida, int guess){

    String Query = "SELECT  NAME1 FROM Capital_Names 

                    WHERE ID = '" + ida + "'

                    AND

                   ( 

                   NAME1='" +name+ "' OR NAME2='" +name+ "' OR NAME3='" +name+ "' OR 

                   NAME4='" +name+ "' OR NAME5='" +name+ "')"

                   ;

return db.rawQuery(Query,null);

}

试试这个...


查看完整回答
反对 回复 2023-07-19
  • 2 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信