Android 如果我使用字母从SQlite数据库中选择行不起作用,为什么?

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

我有一个SQlite数据库,其中包含一些列和EditText内容,我想从数据库中选择一些行

在主要活动中:

案例R.id.betx:

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