【问题标题】:Android SQLITE does not execute queries with argumentsAndroid SQLITE 不执行带参数的查询
【发布时间】:2017-09-01 09:01:02
【问题描述】:

我的参数查询失败,我做错了什么?

我需要以下查询:

cursor = bd.rawQuery("SELECT * FROM user WHERE user.name=?", new String[]{"%"+nombre+"%"});

我尝试了以下方法,但它们也失败了:

cursor = bd.rawQuery("SELECT * FROM user WHERE name=?", new String[]{"%"+nombre+"%"});

cursor = bd.rawQuery("SELECT * FROM user WHERE user.name=?", new String[]{nombre});

这行得通:

cursor = bd.rawQuery("SELECT * FROM user ", null);

感谢您的帮助

【问题讨论】:

  • 看起来你想使用LIKE而不是=

标签: android sql sqlite select sql-like


【解决方案1】:

正如迈克在你的 cmets 中所说 cursor = bd.rawQuery("SELECT * FROM user WHERE name LIKE ? ", new String[]{"%" + nombre + "%"});

或者如果你真的想这样使用:

cursor = bd.rawQuery("SELECT * FROM user ", null); 其中第二个参数为空。

改用转义字符串:

cursor = bd.rawQuery("SELECT * FROM user WHERE name LIKE '%" + nombre.replaceAll("'","''") + "%' ", null );

或使用GLOB 就像描述的here

【讨论】:

    【解决方案2】:

    请试试这个,列出名称为foo的用户。

    cursor = bd.rawQuery("SELECT * FROM user WHERE name = ?", new String[] {"foo"});

    cursor = bd.rawQuery("SELECT * FROM user WHERE name LIKE ?", new String[] {"foo"});

    SQLiteDatabase rawQuery document reference

    【讨论】:

      【解决方案3】:

      试试这个

      cursor = bd.rawQuery("SELECT * FROM user WHERE name= '%"+ nombre + "%'", null);
      

      【讨论】:

      • 除了推动某人 远离 使用参数化查询并进入 SQL 注入领域 (obligatory XKCD link) 这仍然使用 = 而不是 like (除非OP 确实有带有%Fred% 的字段)。
      猜你喜欢
      • 2014-04-02
      • 2011-08-28
      • 1970-01-01
      • 2019-08-31
      • 2011-12-01
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      相关资源
      最近更新 更多