0

ユーザーに値を選択させてから、データベースでその値を検索し、その値を含むすべての行から情報を返そうとしています。

次のことを試しましたが、結果を他のアクティビティに正しく返してユーザーに表示する方法がわかりません。

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

また、これを試しました。int行は、クエリ時にデータを取得するKEY_ROWを指定しています。たとえば、ユーザーはお気に入りのワークアウトの名前を入力し、その名前を含むすべての行をデータベースで検索してから、KEY_ROWS 1、2、および3(Exercise、Repsなどに対応)を返します。ただし、これは1つの行から1つの行の値のみを返します。

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

助言がありますか?

* *編集:

私はすでにそのような活動に何かを持っていました。これが私が持っているものです。しかし、エラーが発生し、「listCursorのタイプをカーソルに変更する」または「「GetFavoriteData」の戻りタイプをカーソルに変更する」のいずれかを要求されます。これもすでに存在します。

また、エラーが発生しないようにした場合、返されたデータを使用してTextViewに挿入する方法がわかりません。setText(listCursor)はできません。

理想的には、返された各行から個別の文字列として情報を取得して、TextViewで必要な方法でそれらを表示できるようにする必要があります。

私の活動では:

String favoriteWorkoutName = cfdName.getText().toString();

                ExerciseDatabase choosefavorite = new ExerciseDatabase(WorkMeOutActivity.this);
                try {
                    choosefavorite.open();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                Cursor listCursor = choosefavorite.GetFavoriteData(favoriteWorkoutName);    


                choosefavorite.close();

私のDBHelperクラスで:

public Cursor GetFavoriteData(String favoriteWorkoutName){

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


}
4

2 に答える 2

0

getString()メソッドを誤解していると思います。見てください:

public abstract String getString (int columnIndex)
Since: API Level 1

要求された列の値を文字列として返します。

The result and whether this method throws an exception when the column value is null or the column type is not a string type is implementation-defined.
Parameters
columnIndex     the zero-based index of the target column.
Returns

    the value of that column as a String. 

したがって、c.getString(row)を使用して内部に1、2、または3を渡すと、特定の行から1つの列(インデックス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();

必要に応じて、文字列の値を好きなように使用してください:)

于 2012-06-05T15:50:14.153 に答える
0

あなたの質問は明確ではありません...

すべての異なる列でその値を検索しようとしている場合、クエリは次のようになります。

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

これにより、KEY_FAVNAME、COLUMN2、およびCOLUMN3列が検索され、favoriteWorkoutNameの内容を含む行が返されます。

特定の列のものだけが必要な場合は、最初に投稿した内容が正しいです。

編集

読み直した後、私はあなたの問題が何であるかについて別の考えを得ています。

カーソルを使用するアクティビティでカーソルを呼び出す必要があります。通常の方法は、dbを作成し、それに関連するすべての機能(追加、削除、情報の更新、カーソルの取得など)を含むDBヘルパークラスを定義することです。次に、そのクラスをインスタンス化し、そのメソッドを使用してデータベースを操作します。

例は次のようになります(データにアクセスするアクティビティで使用されます):

mDbHelper = new WorkoutDB(getActivity());  // instantiate your dbhelper class
mDbHelper.open();                          // use the dbhelper open method to open the db
Cursor listCursor = mDbHelper.fetchFavoriteWorkout(favoriteWorkoutName);  // use the fetchFavoriteWorkout method to get your cursor

dbhelperクラスには、(他の多くの中で)次のようなメソッドが含まれます。

public Cursor fetchFavoriteWorkout(String favoriteWorkoutName){
    return ourDatabase.rawQuery("SELECT * FROM FavoriteTable WHERE " + KEY_FAVNAME + " = '" +  favoriteWorkoutName + "'", null);                 
}
于 2012-06-05T12:26:53.470 に答える