Я пытаюсь улучшить скорость вставки в базу данных Android. Что я сейчас делаю, так это генерирую строку вроде:
SELECT ? as title, ? as musician_id, ? as album_id, ? as genre
UNION SELECT ?, ?, ?, ?
UNION SELECT ?, ?, ?, ?
UNION SELECT ?, ?, ?, ?
UNION SELECT ?, ?, ?, ?
UNION SELECT ?, ?, ?, ?
А затем выполнить его с помощью
SQLiteDatabase database = //initialized in some way
String insertQuery; // the string of the query above
String [] parameters; // the parameters to use in the insertion.
database.execSQL(insertQuery.toString(), parameters);
Я получаю следующую ошибку, когда пытаюсь вставить около 2000 строк:
Caused by: android.database.sqlite.SQLiteException: too many SQL variables (code 1): , while compiling: INSERT INTO songs (title, musician_id, album_id, genre)
SELECT ? as title, ? as musician_id, ? as album_id, ? as genre
UNION SELECT ?, ?, ?, ?
UNION SELECT ?, ?, ?, ?
Когда я пытаюсь вставить около 200 строк, все работает нормально.
Я полагаю, это очевидно - я пытаюсь передать слишком много переменных в одном execSQL
. Кто-нибудь знает, каков предел, чтобы я мог разделить строки, которые я вставляю в соответствующие партии?