如何在Adobe Air中的LIKE运算符模式中使用命名参数

时间:2012-06-07 17:50:10

标签: database sqlite air adobe

我想在LIKE运算符模式中使用命名参数占位符,以便正确转义参数字符串。

这是我修改后的代码,我使用的是at-param占位符:

  

var stmt = new air.SQLStatement();

     

stmt.text =“SELECT * FROM comments WHERE title LIKE'%@ search%';”;

     

stmt.parameters [“@ search”] =“参数字符串”;

     

stmt.execute();

这样做会产生一个带有以下细节的SQLError

  

消息:错误#3315:SQL错误。

     

详细信息:'@search'参数名称在parameters属性中找到但在SQL指定的

中没有

根据Mike Petty的建议,我试过了:

  

stmt.text ='SELECT * FROM comments WHERE title LIKE“@%search%”;';

产生相同的SQL错误详细信息。

文档有:

  

expr :: =(column-name | expr)LIKE模式

     

pattern :: ='[string | %| _]'

我怀疑它是由于qoutes,有关如何使其工作的任何想法而被跳过?

3 个答案:

答案 0 :(得分:4)

为此找到了一个解决方案,基本上不是这样做的:

var stmt = new air.SQLStatement();
stmt.text = "SELECT * FROM comments WHERE title LIKE '%@search%';";
stmt.parameters["@search"] = "argument string";
stmt.execute();

您必须为整个LIKE运算符模式放置一个占位符,并将该模式​​绑定为参数。

var stmt = new air.SQLStatement();
stmt.text = "SELECT * FROM comments WHERE title LIKE @search;";
stmt.parameters["@search"] = "%" + userInput + "%";
stmt.execute();

答案 1 :(得分:0)

从字符串中删除你的字符串。

像工作一样好:

SELECT * FROM comments WHERE comments.title LIKE '%string%';

答案 2 :(得分:0)

很难从你的问题中说出来,但你当前的声明是抛出SQLError,只是不编译,还是只是没有返回任何结果?

如果我不得不猜测我会说你在这里遇到一些问题:

  1. 您不必在where子句中限定列,因为您只有1个表可供选择
  2. 参数 string 在技术上是AIR / Actionscript的保留字(尽管情况有所不同) - 仍然有点令人困惑。
  3. 即使文档和代码允许你使用冒号或符号,我的偏好是@,因为它更容易看到;)

    不要忘记为行所期望的类添加一个itemClass定义 - 这有助于避免匿名对象。

    这应该是相当直接的:

    var stmt:SQLStatement = new SQLStatement();
        stmt.itemClass = Comment;
        stmt.text = 'SELECT * FROM comments WHERE title LIKE "@%search%";';
        stmt.parameters['@search'] = userInput.text;
        stmt.addEventListener(SQLEvent.RESULT, onResults);
        stmt.execute();