2

これは私がメソッドを作成するために使用する私のコードです

String item = item1.getText().toString();
item = item.toLowerCase();
String date = getDate();
edited = new Datahelper(this);
edited.open();
String returnedprice = edited.getprice(item,date);
String returneddetail = edited.getdetail(item,date);
edited.close();
price.setText(returnedprice);
details.setText(returneddetail);

これは私がその文字列を取得するために使用しているメソッドのコードですが、ここでは2番目の日付文字列を使用する方法がわからないため、返される文字列の価格はそのアイテムとその日付を含む行からのものになります。それを行う方法のコード..

public String getprice(String item ,String date) {
// TODO Auto-generated method stub
String[] columns = new String[]{KEY_ROWID,
KEY_CATEGORY,KEY_DATE,KEY_PRICE,KEY_DETAILS};
Cursor v =ourDatabase.query(DATABASE_TABLE, columns, KEY_CATEGORY + " ='" + item 
+"'",null,null, null, null);
if(v!=null){
String price = v.getString(3);
return price;
}
return null;
}
public String getdetail(String item,String date) {
// TODO Auto-generated method stub
String[] columns = new String[]{KEY_ROWID, 
KEY_CATEGORY,KEY_DATE,KEY_PRICE,KEY_DETAILS};
Cursor v =ourDatabase.query(DATABASE_TABLE, columns, KEY_CATEGORY + " ='" + item +
"'",null,null, null, null);
if(v!=null){
String detail = v.getString(4);
return detail;
}
return null;
} 
4

2 に答える 2

4

したがって、selectクエリで2つの引数を使用したい場合は、次のようにします。

次の2つの方法を使用できます。

  • rawQuery()
  • query()

両方の場合の基本的な例を示します。

初め:

String query = "select * from Table where someColumn = ? and someDateColumn = ?";
Cursor c = db.rawQuery(query, new String[] {textValue, dateValue});

説明:

?したがって、プレースホルダーと呼ばれるものを使用することをお勧めします。selectステートメントの各プレースホルダーは(同じ順序で、最初のプレースホルダーが配列の最初の値などに置き換えられます)、selectionArgsの値に置き換えられます。これは上記で宣言された文字列配列です。

2番:

rawQuery()メソッドは理解しやすいので、私はそれから始めました。Query()メソッドはより複雑で、引数が少し多くなります。それで

  • columns:列の配列が選択されることを表します。
  • 選択:言い換えると、where句なので、選択した場合 KEY_COL + " = ?""where " + KEY_COL + " = ?"
  • selectionArgs:各プレースホルダーはこの配列の値に置き換えられます。
  • groupBy:複数行(グループ化)関数です。詳細について
  • 持っている:この句は常にgroupby句で使用されますここに説明があります
  • orderBy:は、1つまたは複数の列に基づいて行を並べ替えるために使用される句です。

また、メソッドにはより多くの引数がありますが、今ではそれらを気にする必要はありません。あなたがそうするなら、Googleはあなたの友達になります。

それでは、説明と例に戻りましょう。

String[] columns = {KEY_COL1, KEY_COL2};
String whereClause = KEY_CATEGORY " = ? and " + KEY_DATE + " = ?";
String[] whereArgs = {"data1", "data2"};

Cursor c = db.query("Table", columns, whereClause, whereArgs, null, null, null);

したがって、whereClauseには、それぞれにプレースホルダーを持つ2つの引数が含まれています。したがって、最初のプレースホルダーは「data1」に置き換えられ、2番目のプレースホルダーは「data2」に置き換えられます。

クエリを実行すると、クエリは次のようになります。

SELECT col1, col2 FROM Table WHERE category = 'data1' AND date = 'data2'

注:をご覧になることをお勧めしますAndroid SQLite Database and ContentProvider - Tutorial

また、より安全で読みやすく明確なソリューションを提供するプレースホルダーの使用をお勧めします。

于 2013-03-10T15:17:19.983 に答える
0

SQLチュートリアルを読んで、そのWHERE句とその記述方法を確認する必要があります。

Androidでは、selectionパラメーターはWHERE句の式です。クエリは次のように記述できます。

c = db.query(DATABASE_TABLE, columns,
             KEY_CATEGORY + " = ? AND " + KEY_DATE + " = ?",
             new String[] { item, date },
             null, null, null);
于 2013-03-10T15:21:52.183 に答える