2013-05-28 43 views
1

閱讀SQLiteDatabase.execSQL的文檔時,我感到有些驚訝。它說「不支持用分號分隔的多個語句。」Android SQLiteDatabase.execSQL:不支持用分號分隔的多個語句?

早期閱讀時,我不會感到驚訝,但我的應用程序中使用的命令,如:

private static final String CREATE_TABLE = 
    "create table " 
    + TABLENAME + "(" 
    + COLUMN_ID  + " integer primary key autoincrement, " 
    + COLUMN_CODE + " text not null," 
    + COLUMN_NAME + " text not null," 
    + COLUMN_STOCK + " integer," 
    + COLUMN_PRICE + " real," 
    + COLUMN_LISTPRICE + " real" 
    + ");" 
    + "create index " 
    + TABLENAME + "_idx on " + TABLENAME 
    + "(" + COLUMN_NAME + ", " 
      + COLUMN_STOCK + ", " 
      + COLUMN_PRICE 
    + ");"; 

... 
database.execSQL(CREATE_TABLE); 

我沒有發現任何錯誤或異常(或者我沒有注意到)。這是否意味着我的聲明中的索引沒有創建?或者是文件錯誤?

+0

爲了便於閱讀,我將字符串拆分並使用事務來防止性能損失。 – RvdK

+0

謝謝RvdK。我已經這樣做了,因爲我有時想刪除並重新創建索引。但是,該文件表示完全不支持。就是那個問題。 ;)無論如何,交易如何改善? – pepr

+0

如果他們的文檔是這樣說的,我傾向於相信它(爲什麼是這樣,我不知道)。如果您同時執行多個execSQL,則以beginTransaction,2x execSQL和endTransaction開頭會更快。首先檢查是否需要;) – RvdK

回答

-2

檢查字符串之間的連接,並確保在字符串變量之間留有空格。例如「CREATE TABLE」+ TABLE_NAME「(」+ COLUMN_ID +「INTEGER」+ COLUMN_NAME +「TEXT」)

+1

對不起,我不明白你的意見。在我看來,這與問題完全無關。 – pepr

+0

OP的例子在語法上是正確的... – TWiStErRob

相關問題