2013-04-16 52 views
1

我创建了一个查询来删除表中的行,如果它们符合某些条件。SQLite将参数绑定到通配符

sqlite3_prepare(sqlite->db, "DELETE FROM test WHERE field1=? AND field2=? AND field3=? AND field4=? AND field5=?", -1, &sqlite->deleteSymbol, 0); 

然后,我将它们绑定到NULL终止的字符串。但是,如果函数的调用者传递的任何字符串都是NULL,那么这意味着给定列的任何值都应该匹配。

即,如果field1field3field5是NULL,则该查询将相当于

DELETE FROM test WHERE field2=? AND field4=? 

可以这样同时重用sqlite3_prepare的输出来实现,而无需NULL的每个组合产生分开的查询/非NULL字符串?

+0

我认为它不能 –

+0

你可以尝试使用'LIKE'从这篇文章如果你使用它像'='没有通配符应该没有性能影响:http://stackoverflow.com/questions/ 6142235/sql-like-vs-performance,只是在'NULL'的情况下,你会使用通配符。在'NULL'情况下有潜在的性能问题,但是这将会针对您的数据库。 –

回答

1

参数始终替换一个特定值或NULL。 你想要做的是改变=操作符的语义,但是通过改变它的一个操作数值是不可能的。

只需准备一个新的DELETE命令。 准备这样一个简单的陈述没有大的开销。