Почему мой запрос падает? - PullRequest
       25

Почему мой запрос падает?

0 голосов
/ 31 декабря 2011

Я написал следующий запрос к БД. Однако приложение завершает работу, когда я получаю доступ к списку действий, который отображает результаты.

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

public Cursor fetchInterface_HSE_Entries(String string) throws SQLException{
    String[] columns = new String[] {KEY_ROW_ID_INTERFACE, KEY_TEXTVIEW_VALUE, KEY_CATEGORY_OPTIONS, KEY_WORKSCREEN};
    String whereClause = KEY_WORKSCREEN+"=" + string;
    Cursor cursor = db.query(TEXTVIEWS_TABLE, columns, whereClause, null, null, null, null);

    if(cursor != null){
        cursor.moveToFirst();
    }
    return cursor;
}

И это часть моего журнала ошибок:

12-31 16:13:38.851: E/AndroidRuntime(480): Caused by: android.database.sqlite.SQLiteException: no such column: testInterface1: , while compiling: SELECT _id, textviewvalue, categoryoptions, workscreen FROM interfacetable WHERE workscreen=testInterface1

Ответы [ 5 ]

1 голос
/ 31 декабря 2011

Workscren - строка, редактирующая ваш запрос и добавляющая одинарные кавычки. Key-workscreen + "=" '+ string +' "вот так

1 голос
/ 31 декабря 2011

Вы должны поместить свое строковое значение в предложении where в кавычки.

1 голос
/ 31 декабря 2011

Потому что вы не помещаете кавычки вокруг вашего whereClause. Попробуйте:

String whereClause = KEY_WORKSCREEN+"='" + string + "'";

Вы можете ясно видеть это в своем журнале ошибок:

SELECT _id, textviewvalue, categoryoptions, workscreen FROM interfacetable WHERE workscreen=testInterface1

должно быть:

SELECT _id, textviewvalue, categoryoptions, workscreen FROM interfacetable WHERE workscreen='testInterface1'
1 голос
/ 31 декабря 2011
SELECT _id, textviewvalue, categoryoptions, workscreen FROM interfacetable WHERE workscreen=testInterface1

Поскольку ошибка говорит о том, что в интерфейсной таблице нет столбца testInterface1, я думаю, что вы должны иметь значение вместо testInterface1 в своем выражении sql. Запустите ваш запрос в БД, и вы увидите ту же ошибку.

1 голос
/ 31 декабря 2011

Попробуйте с:

String whereClause = KEY_WORKSCREEN+"='" + string + "'";

Вам необходимо заключать текстовые значения в ваши запросы, иначе они будут интерпретироваться как имена столбцов (или функций, или как угодно).

Обратите внимание, что это небезопасно для атак SQL-инъекций, вы должны использовать переменные связывания.

String whereClause = KEY_WORKSCREEN+" = ?";
Cursor cursor = db.query(TEXTVIEWS_TABLE, columns, whereClause, 
                         new String[]{string}, null, null, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...