2011-02-28 23 views
1

我正在使用SQLite存储小型移动应用程序的数据。当用户按下“下一个”按钮时,我想要从下一个记录加载数据。我已经完成了该部分,但是如何检查并查看下一个记录是否是最后一个(最大)记录?如果是这样,是否像设置id = 0开始时一样简单?SQLite检查是否在最大ID

我目前的 '未来'():

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

很难说没有定义,但实质上,要获得下一个记录并环绕,我会这样做。

首先,计数是否至少有一个记录要去。

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。