如何使用2个字符串参数从sqlite数据库中检索特定的字符串数据?

时间:2013-03-10 14:51:22

标签: android database sqlite

这是我用来制作方法的代码

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

2 个答案:

答案 0 :(得分:4)

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

您可以使用两种方法:

  • rawQuery()
  • 查询()

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

首先:

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

说明:

所以我建议您使用名为占位符的 ? 。 select语句中的每个占位符都将被来自selectionArgs的值替换(以相同的顺序,因此第一个占位符将被数组中的第一个值替换等) - 它是上面声明的String数组。

第二

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

  • 列:表示将选择列数组。
  • 选择:换句话说就是where子句,如果您的选择是 KEY_COL + " = ?"表示"where " + KEY_COL + " = ?"
  • selectionArgs:每个占位符都将替换为此值 阵列。
  • groupBy:它是多行(分组)功能。 more about
  • 拥有:此子句始终与分组here is explanation一起使用
  • orderBy:是用于根据一个或多个排序行的子句 列

此外,方法有更多参数,但现在您不需要关心它们。如果你愿意,谷歌将成为你的朋友。

让我们回到解释和示例:

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

另外,我建议您使用占位符,以提供更安全,更易读和更清晰的解决方案。

答案 1 :(得分:0)

您应该阅读任何SQL教程,以找出它的WHERE子句以及如何编写它。

在Android中,selection参数是WHERE子句中的表达式。 您的查询可以这样写:

c = db.query(DATABASE_TABLE, columns,
             KEY_CATEGORY + " = ? AND " + KEY_DATE + " = ?",
             new String[] { item, date },
             null, null, null);