猿问

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

我正在构建一个应用程序并第一次处理数据库,我试图获取数据文本作为输入并在特定行中搜索其匹配项。我没能做到这一点。


我已经选择了特定行。我有六列,并且根据 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 来给出答案,即使它在第一个语句中匹配或不。


如果有一些直接查询语句可以做到这一点???


我在互联网上搜索了很多但找不到解决方案。如果可以的话,请不要引导我回答已经回答的问题并回答这个问题。问候


不负相思意
浏览 108回答 2
2回答

慕田峪7331174

你做错的是你检查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..."以返回所有列。

呼如林

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);}试试这个...
随时随地看视频慕课网APP

相关分类

Java
我要回答