2010-02-17 110 views
3

爲什麼不能使用?execSQL SQLiteException在「?」附近

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!

+0

我從來沒有見過一個表名前作爲參數傳遞。但也許我從來沒有嘗試過......參數通常用於允許重複使用相同的查詢計劃。所以你可以在每次運行中提供一個不同的值過濾器。在你的情況下,爲什麼表格是動態的? – beach 2010-02-17 05:10:28

回答

2

我不知道你指的是什麼「rawQuery」(請指出URL)。我不知道任何允許參數替換元數據的SQL引擎,例如表和列的名稱 - 參數替換中只允許使用值或名稱。 SQLite也不例外。

+0

他正在討論'SQLiteDatabase'對象上的'rawQuery()'方法:http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery%28java.lang.String,%20java .lang.String []%29 – 2010-02-17 07:56:13

+0

@fiXedd,tx - 關於其他「答案」的討論現在更有意義;-)。 – 2010-02-17 17:44:48

1

可能不應該?從文檔

copypaste:

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

執行一個SQL語句是不是一個SELECT/INSERT/UPDATE/DELETE. 對於INSERT語句,使用任何替代以下。

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

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

相關問題