【问题标题】:execSQL SQLiteException near "?"“?”附近的 execSQL SQLiteException
【发布时间】:2010-02-17 05:01:25
【问题描述】:

为什么这不起作用??

db.execSQL("INSERT INTO PARTIES (PARTY_NAME, PARTY_COUNT) SELECT DISTINCT(PARTY), COUNT(PARTY) FROM ? WHERE (Year=?) GROUP BY PARTY ORDER BY PARTY ASC", new Object[] { "Election", "2004" });

它在 rawQuery 中完美运行!!

【问题讨论】:

  • 我以前从未见过将表名作为参数传递。但也许我只是从未尝试过......参数通常用于允许重复使用相同的查询计划。因此,您可以在每次运行时提供不同的值过滤器。在您的情况下,为什么表格是动态的?

标签: android sqlite


【解决方案1】:

我不知道您指的是什么“rawQuery”(请提供 URL)。我不知道有任何 SQL 引擎允许对元数据(例如表和列的名称)进行参数替换——在参数替换中只允许值,也不允许名称。 SQLite 也不例外。

【讨论】:

【解决方案2】:

也许不应该?

从文档复制粘贴:

public void execSQL (String sql, Object[] bindArgs)

执行一个不是 SELECT/INSERT/UPDATE/DELETE. 的 SQL 语句 对于INSERT 语句,请改用以下任何一种。

  • insert(String, String, ContentValues)
  • insertOrThrow(String, String, ContentValues)
  • insertWithOnConflict(String, String, ContentValues,int)

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2021-01-18
    • 1970-01-01
    • 2015-01-11
    • 2013-03-13
    • 1970-01-01
    相关资源
    最近更新 更多