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();