Если я использую буквы, выбор строк из базы данных SQlite не работает, почему? - PullRequest
0 голосов
/ 04 марта 2012

У меня есть база данных SQlite с некоторыми столбцами и содержимым EditText. Я хотел бы выбрать несколько строк из базы данных.

В основной деятельности:

case R.id.betx:

        String dates2 = sqletx.getText().toString();
        GlobalVars.settables(dates2);
        Intent intentstar2t = new Intent(dbhelp.this, CustomList.class);
            startActivity(intentstar2t);
        break;

Это мое основное занятие, строка 'date2' - это содержимое текста редактирования, и я сохраняю его для метода 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 будет «date2», который мы установили ранее, и я хотел бы получить строки, в которых KEY_DATE эквивалентен date2.

Операция просмотра списка, в которой я перечисляю подходящие строки.

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

Я использую пользовательский просмотр списка, в каждой строке есть несколько элементов, но суть в том, что я создаю курсор (c) для строк, где KEY_DATE эквивалентен date2.

Моя проблема в том, что я никогда не определяю здесь целочисленную переменную, но если я создаю запись, в которой дата, например, «107» или «6519684», она работает, но если это «tableOne» или любой текст, он разбивает ряд:

return ourDatabase.query(DATABASE_TABLE, columns, KEY_DATE + "=" + deda , null, null, null, null);

и

Cursor c = info.getTable();

(как видите, обе проблемы связаны с методом getTable.

Я использую только строки, поэтому практически числа ("107") также являются строками.

Есть идеи?

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 04 марта 2012

использование: return ourDatabase.query(DATABASE_TABLE, columns, KEY_DATE + "=?" , new String[] { deda }, null, null, null);

Edit (объяснения):

в query методе у вас есть String selection и String[] selectionArgs параметры, поэтому в selection вы можете использовать ? для параметров в selectionArgs. Теперь базовый построитель запросов будет строить запрос с этим параметром и применять правильные escape-символы.

0 голосов
/ 04 марта 2012

Я думаю, что ваш запрос должен быть таким:

return ourDatabase.query(DATABASE_TABLE, columns, KEY_DATE + "= ?" ,
 new String[] {deda}, null, null, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...