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

这是我用于获取该字符串的方法代码,但在这里我不知道如何使用第二个日期字符串,以便返回的字符串价格来自包含该项目和该日期的行。请给我如何做到这一点的代码..

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

所以可能你想在选择查询中使用两个参数:

您可以使用两种方法:

  • 原始查询()
  • 询问()

我将为您提供这两种情况的基本示例。

第一的:

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

解释:

所以我建议你使用?那个叫做占位符。select 语句中的每个占位符将被 selectionArgs 中的值替换(以相同的顺序,因此第一个占位符将被数组中的第一个值替换等) - 它是上面声明的字符串数组。

第二:

rawQuery() 方法更容易理解,所以我从它开始。Query() 方法更复杂并且有更多的参数。所以

  • columns:表示将选择列的数组。
  • 选择:换句话说就是 where 子句,所以如果你的选择是 KEY_COL + " = ?"它意味着"where " + KEY_COL + " = ?"
  • selectionArgs:每个占位符都将替换为此数组中的值。
  • groupBy:它是多行(分组)功能。更多关于
  • 有:这个子句总是和 group by 子句一起使用这里是解释
  • orderBy: is 子句,用于根据一列或多列对行进行排序

方法也有更多参数,但现在你不需要关心它们。如果您愿意,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 包含两个参数,每个参数都有占位符。因此,第一个占位符将替换为“data1”,第二个占位符将替换为“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 回答