前面我们都假定每一条SQL语句都只预编译一次,然后执行、销毁。然而SQLite允许相同的预处理语句(prepared statement)多次执行。此功能通过以下两个函数实现:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
当一条处理语句(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的范围在1到SQLITE_MAX_VARIABLE_NUMBLE(默认为999,可以通过sqlite3_limit()来设定)
? 问号代表下一个没有用到的参数
:AAAA 冒号后面跟着特定的名字表示一个被命名为AAAA的参数,命名了的参数也是有序的。
@AAAA 和上面的格式相似
$AAAA 可以包含文本,使用类似TCL语法
这些参数只是代表了一个占位符,这些位置将随后通过调用sqlite3_bind()来填充。没有通过sqlite3_bind()绑定的参数将为NULL。每一次对相同的参数调用sqlite3_bind()都将覆盖掉上一次调用后的赋值。
文章评论(0条评论)
登录后参与讨论