Я был немного удивлен, читая документ для 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);
я не заметил каких-либо ошибок или исключение (или я не заметил). Означает ли это, что индекс в моем заявлении не был создан? Или это неправильно?
Для удобства чтения я разделил строки и использовал транзакции, чтобы предотвратить штраф за производительность. – RvdK
Спасибо RvdK. Я уже это сделал, потому что иногда хочу иногда указывать и воссоздавать индекс. Тем не менее, документ говорит, что он вообще не поддерживается. Вот в чем вопрос. ;) В любом случае, как транзакция может улучшить это? – pepr
Если они так говорят, я склонен верить в это ^^ (почему это, я не знаю). Если вы выполните несколько execSQL одновременно, это будет быстрее, если вы начнете с beginTransaction, 2x execSQL, а затем endTransaction. Сначала проверьте, если необходимо;) – RvdK