sqlite中遍历数据的一些方法
2010-06-05 16:14
190 查看
研究了一下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 *
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 *
相关文章推荐
- SQLITE删除表中所有数据方法
- asp.net中gridview、datalist、datagrid三个数据控件的foreach遍历方法
- C#遍历DataSet中数据的几种方法总结
- 数据结构——使用非递归方法后序遍历二叉树
- 提升SQLite数据插入效率低、速度慢的方法
- 遍历json获得数据的几种方法
- 三种实现方法实现数据表中遍历寻找子节点
- Yii遍历行下每列数据的方法
- Android 中使用rawquery方法查询指定数据的一些方法总结
- Android中关于JNI 的学习(二)对于JNI方法名,数据类型和方法签名的一些认识
- C#遍历DataSet中数据的几种方法总结
- 表里有一些默认的数据 用什么方法生成一条一条的insert into语句
- C#遍历DataSet中数据的几种方法
- C#中遍历各类数据集合的方法
- js遍历获取表格内数据方法
- 【转】对于JNI方法名,数据类型和方法签名的一些认识
- iOS sqlite3插入数据很慢的原因~解决方法
- android数据存储读取5:Sqlite一些要注意的地方
- SQLite 插入大量数据慢的解决方法
- 处理Clob数据(转)关于oracle中大对象处理的一些方法和实例