Как проверить, существует ли строка перед вставкой? - PullRequest
0 голосов
/ 20 апреля 2019

Я хочу вставить записи в свою базу данных sqllite, но перед вставкой я должен проверить, существует ли запись.

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

SQLiteDatabase db = this.getReadableDatabase();

    String selectQuery = "SELECT  * FROM " + TABLE_TEAM + " WHERE "
            + TEAM_TABLE_NAME + " = " + name+";";

    Log.e(LOG, selectQuery);

    Cursor c = db.rawQuery(selectQuery, null);

    if (c != null) {
         return true;
    }
    return false;

Ответы [ 2 ]

0 голосов
/ 20 апреля 2019

Строки должны быть вставлены в '', поэтому замените

 String selectQuery = "SELECT  * FROM " + TABLE_TEAM + " WHERE "
            + TEAM_TABLE_NAME + " = " + name+";"

на

   replace  String selectQuery = "SELECT  * FROM " + TABLE_TEAM + " WHERE "
            + TEAM_TABLE_NAME + " = \'" + name+"\';"
0 голосов
/ 20 апреля 2019

Это рекомендуемый способ использования rawQuery():

String selectQuery = "SELECT * FROM " + TABLE_TEAM + " WHERE " + TEAM_TABLE_NAME + " = ?";
Cursor c = db.rawQuery(selectQuery, new String[] {name});

так что вы передаете name в качестве параметра запроса и избегаете риска sql внедрения .

В своем коде вы только проверяете, является ли объект Cursor null, а не содержит ли он какие-либо строки, и это правильно.
Так что верните результат getCount() > 0 так:

return c.getCount() > 0;

Это вернет true, если имя уже существует в таблице .

Что касается ошибки no such column, то это нечто иное.
Сначала убедитесь, что TEAM_TABLE_NAME является правильным именем столбца, и если это так, возможно, вы внесли изменения в имена столбцов, которые не отражаются в базе данных.
Поэтому удалите приложение с устройства, чтобы удалить базу данных, а затем снова запустите ее, чтобы заново создать базу данных с новыми именами столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...