原创 【原创】SQLite—参数绑定和重执行已编译语句

2010-3-22 19:37 4400 3 3 分类: MCU/ 嵌入式

前面我们都假定每一条SQL语句都只预编译一次,然后执行、销毁。然而SQLite允许相同的预处理语句(prepared statement多次执行。此功能通过以下两个函数实现:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


sqlite3_reset()


sqlite3_bind()


当一条处理语句(prepared statement)被sqlite3_step()执行一次或多次后,能够通过调用sqlite3_reset()来重置,然后就又可以被执行了。调用sqlite3_reset()来重置而不是调用sqlite3_prepare()来重新创建可以避免不必要的消耗。在很多SQL语句中执行sqlite3_prepare()的时间等于或超过sqlite3_step()的时间,因此尽量避免重复调用sqlite3_ prepare ()对性能的改善有重要的意义。


通常我们很少执行多次完全相同的SQL语句,更多的时候我们可能需要执行一个相似的语句,比如需要插入多条数据,那么我们执行的是相似的INSERT语句,只是其中包含的参数不同,这些参数可以在语句被执行之前绑定到一个具体的值上,因此就只需要不断的改变具体的值,然后执行相同的预处理语句(prepared statement就可以了。


SQLite中可以在有效的字符串中使用以下几种形式的参数:


?NNN 问号后面跟着数字NNN表示第NNN个参数。NNN的范围在1SQLITE_MAX_VARIABLE_NUMBLE(默认为999,可以通过sqlite3_limit()来设定)


?   问号代表下一个没有用到的参数


:AAAA 冒号后面跟着特定的名字表示一个被命名为AAAA的参数,命名了的参数也是有序的。


@AAAA 和上面的格式相似


$AAAA 可以包含文本,使用类似TCL语法


这些参数只是代表了一个占位符,这些位置将随后通过调用sqlite3_bind()来填充。没有通过sqlite3_bind()绑定的参数将为NULL。每一次对相同的参数调用sqlite3_bind()都将覆盖掉上一次调用后的赋值。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条