Android:sqlite从一行中包含类似值的所有行返回信息

Android:sqlite从一行中包含类似值的所有行返回信息,android,sqlite,Android,Sqlite,我试图让用户选择一个值,然后在我的数据库中搜索该值,并从包含该值的所有行返回信息 我尝试了以下操作,但我不确定如何将结果正确返回给用户要查看的其他活动 Cursor c = ourDatabase.rawQuery("SELECT * FROM FavoriteTable WHERE " + KEY_FAVNAME + " = '" + favoriteWorkoutName + "'", null); 我也尝试过这个方法,其中int行指定了查询时要从中获取数据的KEY\u行。例如,用户输入喜

我试图让用户选择一个值,然后在我的数据库中搜索该值,并从包含该值的所有行返回信息

我尝试了以下操作,但我不确定如何将结果正确返回给用户要查看的其他活动

Cursor c = ourDatabase.rawQuery("SELECT * FROM FavoriteTable WHERE " + KEY_FAVNAME + " = '" + favoriteWorkoutName + "'", null);
我也尝试过这个方法,其中int行指定了查询时要从中获取数据的KEY\u行。例如,用户输入喜爱的训练的名称,然后在数据库中搜索包含该名称的所有行,然后返回关键字行1、2和3(对应于练习、重复等)。但是,这仅从一行返回一行值

int row = 1;

    Cursor c = ourDatabase.rawQuery("SELECT * FROM FavoriteTable WHERE " + KEY_FAVNAME + " = '" + favoriteWorkoutName + "'", null);

    do{c.moveToNext();
    String data = c.getString(row);
    return data;
    }while (row <= 3); 
在我的DBHelper类中:

public Cursor GetFavoriteData(String favoriteWorkoutName){

    return ourDatabase.rawQuery("SELECT * FROM FavoriteTable WHERE " + KEY_FAVNAME + " = '" + favoriteWorkoutName + "'", null);


}

你的问题不清楚

如果您试图在所有不同的列中搜索该值,则您的查询应该更像这样:

Cursor c = ourDatabase.rawQuery("SELECT * FROM FavoriteTable WHERE " + KEY_FAVNAME + 
    " LIKE '" + favoriteWorkoutName + "' OR " + COLUMN2 + " LIKE '" + favoriteWorkoutName + 
    "' OR " + COLUMN3 + " LIKE '" + favoriteWorkoutName + "'", null);
public Cursor fetchFavoriteWorkout(String favoriteWorkoutName){
    return ourDatabase.rawQuery("SELECT * FROM FavoriteTable WHERE " + KEY_FAVNAME + " = '" +  favoriteWorkoutName + "'", null);                 
}
这将搜索列KEY_FAVNAME、COLUMN2和COLUMN3,并返回包含favoriteWorkoutName内容的所有行

如果您只需要特定列中的内容,那么您首先发布的内容是正确的

编辑

重读之后,我对你的问题有了不同的看法

您应该在要使用光标的活动中调用光标。通常的方法是定义一个DB助手类,该类创建DB并包含与之相关的所有函数(添加、删除、更新信息、获取游标等)。然后实例化该类并使用其方法处理db

例如(在您希望访问数据的活动中使用):

dbhelper类将包含一个类似以下内容的方法(以及许多其他方法):

Cursor c = ourDatabase.rawQuery("SELECT * FROM FavoriteTable WHERE " + KEY_FAVNAME + 
    " LIKE '" + favoriteWorkoutName + "' OR " + COLUMN2 + " LIKE '" + favoriteWorkoutName + 
    "' OR " + COLUMN3 + " LIKE '" + favoriteWorkoutName + "'", null);
public Cursor fetchFavoriteWorkout(String favoriteWorkoutName){
    return ourDatabase.rawQuery("SELECT * FROM FavoriteTable WHERE " + KEY_FAVNAME + " = '" +  favoriteWorkoutName + "'", null);                 
}

我想你误解了这个方法。看看:

public abstract String getString (int columnIndex)
Since: API Level 1
以字符串形式返回请求列的值。
因此,如果用c.getString(行)传递1、2或3,它只会从特定行中给出一列(索引为1、2或3)的值


如果您不确定某个列的索引,并且希望从其名称获取该列,则可以使用
c.getString(c.getColumnIndex(column_name))


现在,我认为您需要从前几个匹配行(如3行)中检索某些列的值(比如一行的前3列值),并在需要时使用它们使用:

Cursor c = ourDatabase.rawQuery("SELECT * FROM FavoriteTable WHERE " + KEY_FAVNAME + " = '" + favoriteWorkoutName + "'", null);

String fcv="";
String scv="";
String tcv="";


if(c.getCount() == 0)
                    {
                     //no data found
                    }
                    else  {
                        int i=0;
                      c.moveToFirst();
                        do {


                              fcv  = fcv + c.getString(0)); //or use  fcv  = fcv + c.getString(c.getColumnIndex(name of first column)));
                              scv  = fcv + c.getString(1)); 
                              tcv  = fcv + c.getString(2));   
                              i++;
                          } while (c.moveToNext() && i<3);              

                  c.close();
Cursor c=ourDatabase.rawQuery(“从FavoriteTable中选择*,其中“+KEY\u FAVNAME+”='”+favoriteWorkoutName+”,null);
字符串fcv=“”;
字符串scv=“”;
字符串tcv=“”;
如果(c.getCount()==0)
{
//没有找到任何数据
}
否则{
int i=0;
c、 moveToFirst();
做{
fcv=fcv+c.getString(0));//或使用fcv=fcv+c.getString(c.getColumnIndex(第一列的名称));
scv=fcv+c.getString(1));
tcv=fcv+c.getString(2));
i++;

}虽然(c.moveToNext()&&iOk…)我尝试了这一点。首先-如何将所有这些字符串返回到我的活动?当使用return语句时,它只允许我返回一个(ex return fcv;)…如果我尝试返回其他字符串,我会得到一个错误。此外,我尝试只返回字符串fcv,然后将我的TextView设置为该字符串,但没有出现任何结果。不确定我做错了什么…在游标listCursor上的活动中使用此代码(我的意思是使用listCursor代替c),这样就不需要返回多个字符串(函数只能返回值)字符串,因为光标已经有了这些字符串)只需将这些值分配到全局变量以用于TextView。然后根据值通过跟踪/记录来检查您的数据库和查询,以确保您实际获得了值。啊,这更清楚地说明了您在寻找什么。看起来Imran Rana可能有您需要的解决方案。如果不让我知道,我将进一步了解。
Cursor c = ourDatabase.rawQuery("SELECT * FROM FavoriteTable WHERE " + KEY_FAVNAME + " = '" + favoriteWorkoutName + "'", null);

String fcv="";
String scv="";
String tcv="";


if(c.getCount() == 0)
                    {
                     //no data found
                    }
                    else  {
                        int i=0;
                      c.moveToFirst();
                        do {


                              fcv  = fcv + c.getString(0)); //or use  fcv  = fcv + c.getString(c.getColumnIndex(name of first column)));
                              scv  = fcv + c.getString(1)); 
                              tcv  = fcv + c.getString(2));   
                              i++;
                          } while (c.moveToNext() && i<3);              

                  c.close();