Android 如果我使用字母从SQlite数据库中选择行不起作用,为什么?
我有一个SQlite数据库,其中包含一些列和EditText内容,我想从数据库中选择一些行 在主要活动中: 案例R.id.betx:Android 如果我使用字母从SQlite数据库中选择行不起作用,为什么?,android,database,sqlite,android-edittext,Android,Database,Sqlite,Android Edittext,我有一个SQlite数据库,其中包含一些列和EditText内容,我想从数据库中选择一些行 在主要活动中: 案例R.id.betx: String dates2 = sqletx.getText().toString(); GlobalVars.settables(dates2); Intent intentstar2t = new Intent(dbhelp.this, CustomList.class); startAc
String dates2 = sqletx.getText().toString();
GlobalVars.settables(dates2);
Intent intentstar2t = new Intent(dbhelp.this, CustomList.class);
startActivity(intentstar2t);
break;
这是我的主要活动,“dates2”字符串是edittext的内容,我将其保存为setTables方法
我在hornot类中的代码,其中:
public Cursor getTable() {
String deda = GlobalVars.gettables();
String[] columns = new String[]{KEY_ROWID, KEY_NAME, KEY_HOTNESS,
KEY_CALORIE, KEY_MULTI, KEY_DATE};
return ourDatabase.query(DATABASE_TABLE, columns, KEY_DATE + "=" + deda ,
null, null, null, null);
}
在这里,我为满足最后一行要求的行创建一个游标。字符串deda将是我们之前设置的“dates2”,我希望得到KEY_DATE与dates2等价的行
列出适当行的listview活动
if (todoItems.size() > 0) {
todoItems.clear();
}
if (list.size() > 0) {
list.clear();
}
Cursor c = info.getTable();
c = info.getTable();
if (c.moveToFirst())
{
do{
todoItems.add(c.getString(0) + " " + c.getString(1) + " " + c.getString(2)+ " " + c.getString(3)+ " " + c.getString(4));
quanitems.add(c.getString(4));
}
while (c.moveToNext());
}
if (todoItems.size() > 0)
{
for (int i=0; i<todoItems.size(); i++)
{
each=new EachRow();
each.text=(String) todoItems.get(i);
list.add(each);
each2=new EachRow();
each2.text=(String) quanitems.get(i);
list2.add(each2);
}
listView.setAdapter(new MyAdapter(this, 0, list));
}
及
(如您所见,这两个问题都与getTable方法有关
我只使用字符串,所以实际上数字(“107”)也是字符串
有什么想法吗
提前感谢!我认为您的查询应该是这样的:
return ourDatabase.query(DATABASE_TABLE, columns, KEY_DATE + "= ?" ,
new String[] {deda}, null, null, null);
我认为你的问题应该是这样的:
return ourDatabase.query(DATABASE_TABLE, columns, KEY_DATE + "= ?" ,
new String[] {deda}, null, null, null);
使用:
返回ourDatabase.query(数据库表、列、键日期+“=?”,
新字符串[]{deda},null,null,null);
编辑(解释):
在query
方法中,您有String selection
和String[]selectionArgs
参数,因此在selection
中,您可以使用?
作为selectionArgs
中的参数。现在,基础查询生成器将使用此参数构建查询,并应用适当的转义字符。使用:
返回ourDatabase.query(数据库表、列、键日期+“=?”,
新字符串[]{deda},null,null,null);
编辑(解释):
在
query
方法中,您有String选择
和String[]selectionArgs
参数,因此在selection
中,您可以使用?
作为selectionArgs
中的参数。现在,基础查询生成器将使用此参数生成查询,并将应用适当的转义符。谢谢!我接受此答案,因为它来得更早。不过这两个答案都很好。您能解释一下吗为什么有效?谢谢!我接受这个答案是因为它来得更早。但是这两个答案都很好。你能解释一下为什么有效吗?斯卢基安:谢谢你的回答,因为两个答案都有效,我接受了塞尔文的答案,因为它来得更早。你能解释一下为什么你的解决方案有效吗?@JaniBela它有效是因为你不得不这么做在SQL
查询中,将字符串
用单引号或双引号括起来(对于数值,您不会这样做)。当您尝试应用字符串
时,如“107”,因为您直接将值附加到WHERE
子句中,因此您的查询结果如下:KEY\u DATE+“=”+deda
=>钥匙日期+“=”+“107”
=>钥匙日期+“=107”
,这很有效。斯卢基安:谢谢你的回答,因为两个答案都有效。我接受了塞尔文的答案,因为它早就出现了。你能解释一下为什么你的解决方案有效吗?@JaniBela它有效,因为你必须在SQL
查询中用单引号或双引号括起字符串(对于数值,您不需要这样做)。当您尝试应用程序处理字符串(如“107”)时,因为您直接将值附加到WHERE
子句中,所以您的查询结果如下:KEY\u DATE+“=”+deda
=>KEY\u DATE+“=”+“107”
KEY\u DATE+“=107”
,这是有效的。
return ourDatabase.query(DATABASE_TABLE, columns, KEY_DATE + "= ?" ,
new String[] {deda}, null, null, null);