获取下一条记录在SQLite数据库的移动应用程序 [英] Getting next record in SQLite database for mobile application

查看:226
本文介绍了获取下一条记录在SQLite数据库的移动应用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用SQLite数据库的移动应用程序。我似乎无法弄清楚如何进入下一条记录,当用户presses下一步按钮。我的数据库使用'身份证',与自动增量的整数主键。

 私有函数nextMoveRPart(事件:EffectEvent):无效
        {
            VAR cardNumber:INT = parseInt函数(cardNumberLabel.text);

            stmt.sqlConnection =康涅狄格州;
            conn.open(File.applicationStorageDirectory.resolvePath(FlashCards.db));
            stmt.text =SELECT * FROM cardItems WHERE ID =? +和id< = MAX(ID);
            stmt.parameters [0] = cardNumber + 1;
            stmt.addEventListener(SQLEvent.RESULT,resultHandler preV);
            stmt.execute();
            conn.close();
            moveEffectRPart2.play();
        }
        功能resultHandlerNext(事件:SQLEvent):下一个无效//结果处理程序
        {
            VAR结果:的SQLResult = stmt.getResult();
            VAR numResults:INT = result.data.length;
            对于(VAR我:= 0; I< numResults;我++)
            {
                VAR行:对象= result.data [I]
                stext1.text = row.cSide1;
                stext2.text = row.cSide2;
                cardNumberLabel.text = row.id;

            }
        }
 

解决方案

您可以随时存储电流id在ActionScript中的一些变量。然后你就可以重写整个查询字符串。我想,你可以这样写:

  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 第三等。

===

试试这个code。

 保护功能button6_clickHandler(事件:MouseEvent)方法:无效//推 - >钮
        {

            VAR cardNumber:INT = parseInt函数(cardNumberLabel.text);
            / *删除* /
            VAR的SQLResult:的SQLResult = stmt.getResult();
            stmt.sqlConnection =康涅狄格州;
            conn.open(File.applicationStorageDirectory.resolvePath(FlashCards.db));
            / *编辑两行* /
            stmt.text =SELECT * FROM cardItems WHERE ID> ORDER BY ID ASC LIMIT 1;
            stmt.parameters [0] = cardNumber;
            stmt.execute();
            跟踪(sqlresult.data); //值= [对象的对象]
            stext1.text = sqlresult.data.cSide1;
            跟踪(sqlresult.data.cSide1); //值=未定义
            cardNumberLabel.text = sqlresult.data.id;
            跟踪(sqlresult.data.id); //值=未定义
            conn.close();
            moveEffectRPart1.play();
            moveEffectRPart1.addEventListener(EffectEvent.EFFECT_END,nextMoveRPart);

        }
 

I have a mobile application that uses an sqlite database. I cannot seem to figure out how to access the next record when the user presses the 'next' button. My database is using 'id' as primary key with autoincrement as integer.

    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;

            }
        }

解决方案

You can always store current id in some variable in ActionScript. Then You will be able to rewrite the whole query string. I think You can write something like this:

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

The current_id is an ActionScript variable. This should be good enough for sqlite. You may set current_id to 0 for the first record. If a user click a next button, You should store there current id from the already received record.

The second option is to use OFFSET. It exclude some records from the beginning of returned set of rows.

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

The your_offset is an ActionScript variable. It is 0 if You want get the first record, 1 for second, 2 for third and so on.

===

Try this code.

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);

        }

这篇关于获取下一条记录在SQLite数据库的移动应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆