【问题标题】:Sqlite: How to insert variable into string in prepared statementSqlite:如何在准备好的语句中将变量插入字符串
【发布时间】:2010-03-04 13:56:08
【问题描述】:

我正在使用 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 的事实,那么使用其他数据库技术是如何完成的?

【问题讨论】:

  • 不知道我脑海中的答案,但你尝试过 setString(1, "%/hello%") 吗?您可能需要将输入字符串用 % 包围
  • 我想我可以做... WHERE foo=?和 a.setString(1, "\'%/hello%/\'");作为最后的手段。
  • 在我看到您的建议之前发表了我的评论 SB - 谢谢。我可以这样做,但我仍然想知道是否有更好的方法!

标签: sql sqlite prepared-statement


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 2015-03-02
      • 2020-02-29
      • 1970-01-01
      • 2013-09-18
      相关资源
      最近更新 更多