Ошибка вставки строк Sqlite

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

При первом вызове функции ничего не выдается, и функция вставки возвращает ожидаемый результат 1. Но когда я вызываю функцию select all, таблица пуста.

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

Я использую Sqldelight.

public long insertFollower(String name, String wca_id, long created_at) {

    try {
        SQLiteDatabase db = openDatabase();

        return db.insert(Follower.TABLE_NAME, null, Follower.FACTORY.marshal()
                .name(name)
                .wca_id(wca_id)
                .created_at(created_at)
                .asContentValues());
    }

    catch (Exception e) {
        e.printStackTrace();
    }

    finally {
        closeDatabase();
    }

    return 0;
}

private static AtomicInteger openCount = new AtomicInteger();
private static SQLiteDatabase database;

public static final String DATABASE_NAME = "database.db";
public static final int DATABASE_VERSION = 12;

private static DatabaseHelper instance;

public static synchronized DatabaseHelper getInstance(Context context) {
    if(instance == null) {
        instance = new DatabaseHelper(context);
    }

    return instance;
}

public synchronized SQLiteDatabase openDatabase() {
    if(openCount.incrementAndGet() == 1) {
        database = getWritableDatabase();
    }

    return database;
}

public synchronized void closeDatabase() {
    if(openCount.decrementAndGet() == 0) {
        database.close();
    }
}


@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL(Follower.CREATE_TABLE);
    db.execSQL(Record.CREATE_TABLE);

}

И Follower.CREATE_TABLE, который был сгенерирован sqldelight

  String CREATE_TABLE = ""
  + "CREATE TABLE follower (\r\n"
  + "    _id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\r\n"
  + "    name TEXT NOT NULL,\r\n"
  + "    wca_id TEXT NOT NULL\r\n"
  + ")";

РЕДАКТИРОВАТЬ:

Я заметил нечто странное, что может помочь:

Это работает, только если таблица пуста

Я вставляю подписчика, это не работает. Но когда я вставляю другого подписчика с тем же идентификатором, что и у первого (есть автоинкремент первичного ключа). Я получаю УНИКАЛЬНОЕ исключение, но таблица все еще пуста.

Не стесняйтесь спрашивать больше информации.

Спасибо.

1 ответ

Решение

Я наконец-то нашел ответ благодаря @anstrong: чтобы выбрать подписчика, которого я использовал cursor.moveToFirst() и while(cursor.moveToNext()) был вызван сразу после

Другие вопросы по тегам