2014-02-09 4 views
0

У меня есть простое приложение для Android, которое подключается к моему серверу и сохраняет таблицу в базе данных и показывает нужную строку базы данных с нажатием кнопки.
Проблема заключается в том, что когда я хочу достичь своих строк, используя столбец «date», он выдает это исключение ниже.
Ну, если я вызываю строку по id, все работает правильно.Синтаксис Sqlite Android при чтении строк

Мой вопрос в том, что это связано с точками переменной даты или чем-то еще? Примечание: я смотрел базу данных с программами с открытым кодом, и все выглядит нормально, но я не могу читать строки с помощью android с использованием столбца даты.

это мое исключение

02-09 19:45:21.909: E/AndroidRuntime(8286): Caused by: android.database.sqlite.SQLiteException: 
near ".2014": syntax error (code 1): , while compiling: SELECT DISTINCT _id, Date, Day, v1, v2, v3, 
v4 FROM db1 WHERE Date=07.02.2014 

Моя страница Команда SQL

DATABASE_CREATE = "create table " + DbTableName + " (" + KEY_ROWID 
       + " integer primary key autoincrement, " + KEY_Date 
       + " text not null, " + KEY_Day + " text not null, " + KEY_v1 
       + " text not null, " + KEY_v2 + " text not null, " + KEY_v3 
       + " text not null, " + KEY_v4 + " text not null " 
       + ");"; 

мой метод GET

public Cursor getDay(String date) throws SQLException { 
     Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] { 
       KEY_ROWID, KEY_Date, KEY_Day, KEY_v1, KEY_v2, KEY_v3, KEY_v4 }, 
       KEY_Date + "=" + date, null, null, null, null, null); 
     if (mCursor != null) { 
      mCursor.moveToFirst(); 
     } 
     return mCursor; 
    } 

ответ

1

Побег ваши строковые литералы с '' или использовать ? заполнителей. То есть, либо изменение

KEY_Date + "=" + date, 

в

KEY_Date + "='" + date + "'" 

или даже лучше, изменить

KEY_Date + "=" + date, null 

в

KEY_Date + "=?", new String[] { date } 
+0

это о выпуске sqlinjection? – user2638084

+0

Да, метод '?' Bind arg предотвращает проблемы синтаксиса и SQL-инъекции, а в некоторых случаях повышает производительность. Но исходной проблемой было то, что строковый литерал не цитировался. – laalto

+0

хорошо, это было то, что я думал в первую очередь. Спасибо за ваше решение. – user2638084

Смежные вопросы