在SQLite数据库中获取移动应用程序的下一条记录

时间:2011-02-27 14:34:09

标签: flex sqlite actionscript

我有一个使用sqlite数据库的移动应用程序。当用户按下“下一步”按钮时,我似乎无法弄清楚如何访问下一条记录。我的数据库使用'id'作为主键,autoincrement为整数。

    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 WHERE id = ?" + "AND id <= MAX(id)";
            stmt.parameters[0] = cardNumber+1;
            stmt.addEventListener(SQLEvent.RESULT, resultHandlerPrev);
            stmt.execute();
            conn.close();
            moveEffectRPart2.play();
        }
        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 个答案:

答案 0 :(得分:1)

您始终可以在ActionScript中的某个变量中存储当前ID。然后,您将能够重写整个查询字符串。我想你可以这样写:

stmt.text = "SELECT * FROM cardItems WHERE id > " + current_id + " ORDER BY id ASC LIMIT 1;";

current_id是一个ActionScript变量。对于sqlite来说这应该足够了。您可以将current_id设置为0作为第一条记录。如果用户单击下一个按钮,您应该存储已接收记录中的当前ID。

第二种选择是使用OFFSET。它从返回的行集开头排除了一些记录。

stmt.text = "SELECT * FROM cardItems ORDER BY id ASC LIMIT 1 OFFSET " + your_offset + ";";

your_offset是一个ActionScript变量。如果您想要获得第一条记录,0,第二条记录为1,第三条记录为2,依此类推。

===

试试这段代码。

protected function button6_clickHandler(event:MouseEvent):void  // pushed --> button 
        {

            var cardNumber:int = parseInt(cardNumberLabel.text);
            /* Deleted */
            var sqlresult:SQLResult = stmt.getResult();
            stmt.sqlConnection = conn;
            conn.open(File.applicationStorageDirectory.resolvePath("FlashCards.db"));
            /*Edited two lines*/
            stmt.text = "SELECT * FROM cardItems WHERE id > ? ORDER BY id ASC LIMIT 1";
            stmt.parameters[0] = cardNumber;
            stmt.execute();
            trace(sqlresult.data);  // value = [object Object]
            stext1.text = sqlresult.data.cSide1;
            trace(sqlresult.data.cSide1);  // value = 'undefined'
            cardNumberLabel.text = sqlresult.data.id;
            trace(sqlresult.data.id);  // value = 'undefined'
            conn.close();
            moveEffectRPart1.play();
            moveEffectRPart1.addEventListener(EffectEvent.EFFECT_END, nextMoveRPart);

        }