【问题标题】:SQLite bind parameter to wildcardSQLite 将参数绑定到通配符
【发布时间】:2013-04-16 11:22:47
【问题描述】:

我创建了一个查询,如果它们符合某些条件,则从我的表中删除行。

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 字符串的每个组合创建单独的查询?

【问题讨论】:

  • 你可以尝试使用这篇文章中的LIKE,如果你像=一样使用它,不带通配符,应该不会影响性能:stackoverflow.com/questions/6142235/sql-like-vs-performance,就NULL而言你会使用通配符。 NULL 案例中存在潜在的性能问题,但这将特定于您的数据库。

标签: c++ sql sqlite


【解决方案1】:

参数总是替换一个特定值,或NULL。 您想要做的是更改 = 运算符的语义,但这无法通过更改其操作数值之一来实现。

只需准备一个新的DELETE 命令。 准备这样一个简单的语句并没有太大的开销。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 2013-09-16
    • 2021-11-15
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多