【问题标题】:syntax error in "SELECT DISTINCT _id near "SELECT"“SELECT DISTINCT _id”中“SELECT”附近的语法错误
【发布时间】:2021-04-28 13:00:26
【问题描述】:

如果有人知道从行中的文本中获取 rowId 的更好方法,请告诉我。

我一直在绕圈子,我知道这可能很简单,但我无法弄清楚。希望有人能告诉我我做错了什么。运行此 SQLite 代码时出现错误:

String where = "SELECT rowid, * FROM masterRecord WHERE masNameCol=" + name;
Cursor c =  db.query(true, masterName, ALL_KEYS_MASTER, where, null, null, null, null, null);

错误指向第二行。

“name”是一个字符串变量(在本例中是“Mary”)。我得到的确切错误是:

SQLiteLog:(1) “SELECT”附近:“SELECT DISTINCT _id, masNameCol, masTotalTimeCol FROM masterRecord WHERE SELECT rowid, * FROM masterRecord WHERE masNameCol=Mary”中的语法错误

我已经尝试了所有我能找到和想到的语法更改,但它永远不会改变错误。我只是想获取该行的 rowId,以便可以更改另一列中的值。

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    使用占位符进行查询:

    where = "masNameCol = ?";
    whereArgs = new String[] { name };
    columns = new String[] { "rowId" , /* all other column names you are interested in */  };
    Cursor c =  db.query("mytable", columns, where, whereArgs, null, null, null);
    

    【讨论】:

      【解决方案2】:

      使用rawQuery(),而不是query()

      您正在尝试指定整个 SQL 语句,这就是 rawQuery() 的用途。 query() 将 SQL 语句从片段中组合起来,而您的片段 (where) 不仅仅是 WHERE 子句。

      【讨论】:

      • 这很有帮助。谢谢你。现在我有一个不同的错误:没有这样的列:Mary in "SELECT rowid, * FROM masterRecord WHERE masNameCol=Mary" 现在使用这个:Cursor c = db.rawQuery(where, null); (哪里还是和上面一样)
      • @swordguy8:在 SQL 中,您需要引用字符串常量。大概,你想要SELECT rowid, * FROM masterRecord WHERE masNamCol='Mary'
      • 好的,我将 where 更改为“SELECT rowid, * FROM masterRecord WHERE masNameCol= ?”然后将 rawQuery 更改为 rawQuery(where, new String[] {name}) 并且错误消失了!但现在我的退货线路有错误。我正在更新我的原始帖子以显示这一点。
      • 在为第一个问题弄清楚之前没有看到您的回复。帖子已更新。
      • @swordguy8 不要更改要求,因为这样会使您收到的所有答案无效。如果原始问题由其中一个答案解决,则通过单击其复选标记接受它。如果有新问题,您可以提出新问题。花点时间阅读:meta.stackoverflow.com/questions/251078/…
      猜你喜欢
      • 2014-03-12
      • 2017-01-28
      • 1970-01-01
      • 2011-12-07
      • 2019-08-16
      • 2016-08-23
      • 2018-10-15
      • 1970-01-01
      • 2018-08-02
      相关资源
      最近更新 更多