爲什麼不能使用?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!
爲什麼不能使用?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!
我不知道你指的是什麼「rawQuery」(請指出URL)。我不知道任何允許參數替換元數據的SQL引擎,例如表和列的名稱 - 參數替換中只允許使用值或名稱。 SQLite也不例外。
他正在討論'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
@fiXedd,tx - 關於其他「答案」的討論現在更有意義;-)。 – 2010-02-17 17:44:48
可能不應該?從文檔
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
我從來沒有見過一個表名前作爲參數傳遞。但也許我從來沒有嘗試過......參數通常用於允許重複使用相同的查詢計劃。所以你可以在每次運行中提供一個不同的值過濾器。在你的情況下,爲什麼表格是動態的? – beach 2010-02-17 05:10:28