【问题标题】:Fetching data rendomly from sqlite without repetition从 sqlite 中随机获取数据而不重复
【发布时间】:2013-11-26 17:30:47
【问题描述】:

我正在使用sqlite 数据库,一切顺利。我在表中添加了 4 个条目,然后在我的 xib 文件中添加了 textview。现在我希望我的textview 可以不重复地向我显示这些条目。我的意思是每当我运行我的应用程序时,我的textview 应该从之前未显示的不同行中获取数据。 请帮我解决我的问题。

~~~~~~~~~~~~~~~~~~~~~~~~~ 从MOtivational Thoughts表中获取数据~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~

    if(sqlite3_open([databasePath UTF8String], &contactDB) == SQLITE_OK) {

        const char* sql = "Select * FROM THOUGHTS";

        sqlite3_stmt *compiledStatement;

    if (sqlite3_prepare_v2(contactDB, sql, -1, &compiledStatement, nil)==SQLITE_OK) {

         NSLog(@"Ready to enter while loop");

        while(sqlite3_step(compiledStatement) == SQLITE_ROW) {

            NSString *aid = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
            textView.text = aid;
        }
    }

    sqlite3_finalize(compiledStatement);

}
sqlite3_close(contactDB);
    }

在 textView.text 中,我只获取第一行数据,但我希望 textview 应该从列的任何行获取图片数据。

【问题讨论】:

  • 那只是我要亲爱的.....
  • 您需要先研究并尝试各种选项,然后再提出您的问题寻求帮助,而没有代码怎么会有人可以帮助您。
  • 你想删除重复的行???或者你想知道如何从数据库中获取记录????
  • @Sim 其实我两个都想要.....
  • 您想随机获取但避免重复接收数据?为什么不将“随机”存储在 {random -> random} 类型的哈希表中,并且不再查询该行?这假设在第一个和最后一个随机查询之间,您永远不会更新您的表。我不确定这是否是您想要的。

标签: ios iphone sqlite


【解决方案1】:

将名为alreadyFetched 的列添加到您的表中,然后在从表中获取随机行后,将此行的alreadyFetched 设置为true。再次获取行时,只选择带有alreadyFetched = false的行

要获得随机行,请使用我刚刚描述的查询选择所有行,然后选择带有arc4random%[rowcount] 的接收行之一。

【讨论】:

  • 这并不难——像const char* sql = "Select * FROM THOUGHTS Where alreadyFetched = false"; 这样的选择语句会得到数组中尚未使用的所有行,然后你只需要使用randomRow = [resultArray objectAtIndex:(arc4random()%[resultArray count]); 得到一个随机行。对于该行,您发出一条更新语句以将 alreadyFetched 设置为 true:Update thoughts set alreadyFetched = true where ROWID = randomRow.ROWID;。就是这样。
  • 我已经解决了这个问题,但现在我坚持使用新问题。那就是我想将我的 sqlitedatabase 文件保存到我的项目的包中,然后在目录路径上调用该数据库文件。这个过程要怎么做??请帮帮我。
  • 我会说这是一个更好的方法。考虑到您需要获取一组行然后获取您想要的行,它可能会更慢,但它比哈希表方法更容易令人难以置信。此外,它对表更新没有任何限制。
  • 另外,sqlite 框架会进行优化,不会加载所有选择的行,所以它也不应该太慢。
猜你喜欢
  • 1970-01-01
  • 2014-06-30
  • 2014-08-25
  • 2018-10-23
  • 1970-01-01
  • 2017-04-26
  • 2018-04-30
  • 2021-09-27
  • 2014-04-02
相关资源
最近更新 更多