Sqlite:如何将变量插入准备好的语句中的字符串中

发布于 2024-08-23 14:52:37 字数 404 浏览 7 评论 0原文

我正在使用 Java 包装器来访问 Sqlite,但我认为这是一个一般的 Sqlite 问题。

String stmt = "SELECT foo FROM bah WHERE foo='%/?/%';
PreparedStatement a = myConn.prepareStatement(stmt);

a.setString(1, "hello");
a.executeQuery();

...抛出异常 - 它不喜欢 ?在引号内。如果我这样做的话一切都很好

...WHERE foo=?

,但这不是我想要的声明。

如何将变量插入到这样的准备好的语句中?如果您忘记了我正在使用 Sqlite,那么如何使用其他数据库技术来完成此操作?

I'm using a Java wrapper for accessing Sqlite but I assume this is a general Sqlite question.

String stmt = "SELECT foo FROM bah WHERE foo='%/?/%';
PreparedStatement a = myConn.prepareStatement(stmt);

a.setString(1, "hello");
a.executeQuery();

... throws an exception - it doesn't like the ? being inside quotes. Everything is fine if I do

...WHERE foo=?

but this isn't the statement I want.

How can I insert a variable into such a prepared statement? If you forget about the fact I'm using Sqlite, how is this is done using other database technologies?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

因为看清所以看轻 2024-08-30 14:52:37

我遇到的数据库都不允许您将参数放入字符串文字中。如果支持这一点,那么您必须转义字符串中不是参数的每个 ? 字符。

但是,您可以使用字符串连接来支持您所追求的:

SELECT foo FROM bah WHERE foo = '%/' || ? || '/%'

No database I've encountered will let you put a parameter inside a string literal. If this was supported, then you'd have to escape every ? character in a string that wasn't a parameter.

You can, however, use string concatenation to support what you are after:

SELECT foo FROM bah WHERE foo = '%/' || ? || '/%'
九公里浅绿 2024-08-30 14:52:37

设置值时可以添加通配符:

String stmt = "SELECT foo FROM bah WHERE foo= ?"
PreparedStatement a = myConn.prepareStatement(stmt);
a.setString(1, "%hello%");

You can add the wildcard when setting the value:

String stmt = "SELECT foo FROM bah WHERE foo= ?"
PreparedStatement a = myConn.prepareStatement(stmt);
a.setString(1, "%hello%");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文