Проверка SQLite, если при максимальном идентификаторе - PullRequest
1 голос
/ 28 февраля 2011

Я использую SQLite для хранения данных для небольшого мобильного приложения. Когда пользователь нажимает кнопку «Далее», я бы хотел, чтобы данные загружались из следующей записи. Я выполнил эту часть, но как мне проверить и проверить, является ли следующая запись последней (максимальной)? И если это так, это так же просто, как установить id = 0, чтобы начать с начала?

My Current 'next' ():

private function nextMoveRPart(event:EffectEvent):void
{
    var cardNumber:int = parseInt(cardNumberLabel.text);

    stmt.sqlConnection = conn;
    conn.open(File.applicationStorageDirectory.resolvePath("FlashCards.db"));
    stmt.text = "SELECT * FROM cardItems IF id <= MAX(id)" + "AND id <= MAX(id) WHEN id = ?";
    stmt.parameters[0] = cardNumber+1;
    stmt.addEventListener(SQLEvent.RESULT, resultHandlerPrev);
    stmt.execute();
    conn.close();
    moveEffectRPart2.play();
}

resultHandlerNext ()

function resultHandlerNext(event:SQLEvent):void  // result handler next
{
    var result:SQLResult = stmt.getResult();
    var numResults:int = result.data.length;
    for(var i:int = 0; i < numResults; i++)
    {
        var row:Object = result.data[i];
        stext1.text = row.cSide1;
        stext2.text = row.cSide2;
        cardNumberLabel.text = row.id;
    }
}

Спасибо!

1 Ответ

1 голос
/ 08 марта 2011

Трудно сказать без определения, но, по сути, чтобы получить следующую запись и обернуть ее, я бы поступил следующим образом.

Сначала посчитайте, есть ли еще хотя бы одна запись.

SELECT COUNT(*) FROM cardItems WHERE id > ?

Если результат подсчета хотя бы 1, получить этот результат:

SELECT * FROM cardItems WHERE id > ? ORDER BY id LIMIT 1

Если результат подсчета был 0, откат:

SELECT * FROM cardItems WHERE id = (SELECT MIN(id) FROM cardItems)

Это касается нескольких случаев. Например, если ваш идентификатор не всегда «текущий + 1» (скажем, у вас есть удаленная запись), и если ваш первый идентификатор не равен 0.

...