2012-12-10 2 views
0

У меня есть прекомпилированная база данных, и я хочу, чтобы получить данные по передаваемым параметрамDB Cursor результатов всегда пустой, если я пытаюсь получить данные с помощью селективного запроса

Но по какой-то странной причине результатов курсора всегда пустой

метод

Моей GetData в адаптере

public Cursor getData(String uso, String eta, String category, 
      String class) { 
     try { 
      Cursor c; 
      if (class.equals(null) && category.equals(null)) { 
       c = mDb.rawQuery("SELECT * FROM dbtable WHERE Uso LIKE \"" 
         + uso + "\" AND Eta LIKE \"" + eta 
         + "\" AND Language LIKE \"" + language 
         + "\" order by Name asc", null); 
      } else if (class.equals(null)) { 
       c = mDb.rawQuery("SELECT * FROM dbtable WHERE Uso LIKE \"" 
         + uso + "\" AND Eta LIKE \"" + eta 
         + "\" AND Tipo LIKE \"" + category 
         + "\" AND Language LIKE \"" + language 
         + "\" order by Name asc", null); 
      } else if (category.equals(null)) { 
       c = mDb.rawQuery("SELECT * FROM dbtable WHERE Uso LIKE \"" 
         + uso + "\" AND Eta LIKE \"" + eta 
         + "\" AND Certification LIKE \"" + class 
         + "\" AND Language LIKE \"" + language 
         + "\" order by Name asc", null); 
      } else { 
       c = mDb.rawQuery("SELECT * FROM dbtable WHERE Uso LIKE \"" 
         + uso + "\" AND Eta LIKE \"" + eta 
         + "\" AND Tipo LIKE \"" + category 
         + "\" AND Certification LIKE \"" + class 
         + "\" AND Language LIKE \"" + language 
         + "\" order by Name asc", null); 
      } 
      if (c != null) { 
       c.moveToNext(); 
      } 
      return c; 
     } catch (SQLException mSQLException) { 
      Log.e(TAG, "getDataCar >>" + mSQLException.toString()); 
      throw mSQLException; 
     } 

    } 
... 

Этот курсор используется в методе, который помещает все записи в массиве автомобилей объекты

public Car[] getDataDBCarsArray(String uso, String eta, 
      String category, String class) { 
     ArrayList<Car> list = new ArrayList<Car>(); 
     Cursor c = getData(uso, eta, category, class); 
     try { 
..... 

Все отлично работает, если вместо выше GetData (....) Я пытаюсь использовать

public Cursor getAllData(){ 
    try { 
     Cursor c = mDb.rawQuery("SELECT * FROM dbtable order by Name asc", null); 
     if (c != null) { 
      c.moveToNext(); 
     } 
     return c; 
    }catch (SQLException mSQLException) { 
     throw mSQLException; 
    } 

} 

так кажется, проблема с запросом в GetData (...).

Но я не могу понять, где ошибка.

Если я пытаюсь открыть базу данных, есть много элементов для переданных параметров, но странно ничего не находит.

NB

язык статическое значение, которое зависит от языка устройства

ответ

2

Вы забыли метасимволы SQL ...

Это:

WHERE column = "John" 

ли такой же как:

WHERE column LIKE "John" 

Вы хотите включить % и _ символов, чтобы создать условие, как:

WHERE column LIKE "%John%" 

Кроме того, вы должны воспользоваться SQLite параметризации и защитить себя от SQL injection атак:

c = mDb.rawQuery("SELECT * FROM dbtable " + 
     "WHERE Uso LIKE ? AND Eta LIKE ? AND Language LIKE ? ORDER BY Name", 
     new String[] { "%" + uso + "%", 
         "%" + eta + "%", 
         "%" + language + "%" }); 
+0

Спасибо для ответа. Но я не уверен, что понял правильный синтаксис. Не могли бы вы дать мне образец для первого блока if getData()? (Eta, Name и т. Д. Являются столбцами) – AndreaF

+1

Я обновил свой ответ с более крупным примером. Я использовал довольно много пробелов, чтобы помочь новым аспектам выскочить на вас, не стесняйтесь использовать больше. – Sam

+0

Большое вам спасибо! – AndreaF