博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sqlite中遍历数据的一些方法
阅读量:2489 次
发布时间:2019-05-11

本文共 2115 字,大约阅读时间需要 7 分钟。

研究了一下sqlite的遍历数据的方法,汇总在下面:

by:陈运文

1 使用sqlite的iterator:foreach()

 

通过sqlite_query()获得查询数据集的句柄后,使用SQLITE的iterator来遍历结果

 

例程如下:

 

$db = new sqlite_db("TestDb");                            

$db->query("
    INSERT INTO MyFood (name, price) values ('Cookie', 255.95);
    INSERT INTO MyFood (name, price) values ('Pretz', 155.95);
    INSERT INTO MyFood (name, price) values ('Beer', 120.45);
");
$result = $db->query("SELECT * FROM MyFood ");
foreach($result as $row ) {
    echo $row['id'], " ", $row['name'], " ", $row['price'], "/n";   
}
unset($db);

这里的iterator和STL中的迭代子iterator非常相似,可以通过它完成对查询数据集的逐一访问;这里foreach()方法可以访问句柄对象当前记录,并自动循环到下一条记录,直到SELECT命令取出的结果完全被访问到;这里使用了SELECT * 命令,其实际结果就是将MyDrings table里面的元素全部遍历到了

 

除了foreach() 以外,还有以下iterator function可以使用:

 

  • sqlite_has_more()  当结果集(result set)中仍然有记录时,返回TRUE,可以用来判断是否遍历完成
  • sqlite_current()  获取当前指向的记录row数据
  • sqlite_next() 将iterator的指针指向下一条记录
  •  

    相关的用法如:

     

    $db = sqlite_open("TestDb");

    $result = sqlite_query("SELECT * FROM MyFood ");
    while (sqlite_has_more($result)) {
        $row = sqlite_current($result);     
        echo $row['id'], " ", $row['name'], " ", $row['price'], "/n";   
        sqlite_next($result);

     

    2 使用sqlite_fetch_array()

     

    sqlite中提供的sqlite_fetch_array() ,非常好的功能是在返回当前row的数据进行处理后,会自动指向下面一行,直到query()返回的set遍历结束,例如:

     

    $db = sqlite_open("TestDb");

    sqlite_query($db,
      "INSERT INTO MyFood (name, price) values ('Cookie', 255.95);
       INSERT INTO MyFood (name, price) values ('Pretz', 155.95);
       INSERT INTO MyFood (name, price) values (Beer, 120.45)
      ");
    $result = sqlite_query($db, "SELECT * FROM MyFood ");
    while ($row = sqlite_fetch_array($result)) {
      echo $row['id'], " ", $row['name'], " ", $row['price'], "/n";   
    }
    sqlite_close($db);

     

    3 直接使用sqlite_array_query() 命令

     

    sqlite中还提供了sqlite_array_query()命令,这条命令相当于将query() 和 sqlite_fetch_array() 组合在一起

    将SQL查询语句和随后遍历结果的功能一次实现,比较方便:

     

    $db = sqlite_open("TestDb");

    $result = sqlite_array_query($db, "SELECT * FROM MyFood ");
    foreach ($result as $row) {
        echo $row['name'] . " = " . $row['price'] . "/n";
    }
    sqlite_close($db);

     

    4 使用回调函数的方法

     

    exec(sqlstr, callback,callpara)

     

    sqlstr设置为string:

     

    "SELECT * FROM MyFood where status = 0 limit 100"

    然后update所select出的set中所有status为1(表示已被读出)

    这种方式可以控制每次被select出的set数量,当数据库非常大时,性能优于使用select *

     

     

     

转载地址:http://dcmrb.baihongyu.com/

你可能感兴趣的文章
获取推送通知的DeviceToken
查看>>
Could not find a storyboard named 'Main' in bundle NSBundle
查看>>
CocoaPods安装和使用教程
查看>>
Beginning Auto Layout Tutorial
查看>>
block使用小结、在arc中使用block、如何防止循环引用
查看>>
iPhone开发学习笔记002——Xib设计UITableViewCell然后动态加载
查看>>
iOS开发中遇到的问题整理 (一)
查看>>
Swift code into Object-C 出现 ***-swift have not found this file 的问题
查看>>
为什么你的App介绍写得像一坨翔?
查看>>
RTImageAssets插件--@3x可自动生成@2x图片
查看>>
iOS开发的一些奇巧淫技
查看>>
常浏览的博客和网站
查看>>
Xcode 工程文件打开不出来, cannot be opened because the project file cannot be parsed.
查看>>
iOS在Xcode6中怎么创建OC category文件
查看>>
5、JavaWeb学习之基础篇—标签(自定义&JSTL)
查看>>
8、JavaWEB学习之基础篇—文件上传&下载
查看>>
reRender属性的使用
查看>>
href="javascript:void(0)"
查看>>
h:panelGrid、h:panelGroup标签学习
查看>>
f:facet标签 的用法
查看>>