Próbuję poprawić szybkość wkładów do mojej bazy danych Androida. Co jestem obecnie robi to generuje ciąg jak:Jaki jest limit zmiennych SQL, które można określić w pojedynczym zapytaniu execSQL
SELECT ? as title, ? as musician_id, ? as album_id, ? as genre
UNION SELECT ?, ?, ?, ?
UNION SELECT ?, ?, ?, ?
UNION SELECT ?, ?, ?, ?
UNION SELECT ?, ?, ?, ?
UNION SELECT ?, ?, ?, ?
I to wykonanie go z
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);
otrzymuję następujący błąd, gdy próbuję wstawić około 2000 wierszy:
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 ?, ?, ?, ?
Gdy próbuję wstawić około 200 wierszy, wszystko działa poprawnie.
Przypuszczam, że to jest oczywiste - Próbuję przekazać zbyt wiele zmiennych w jednym execSQL
. Czy ktokolwiek wie, jaki jest limit, abym mógł podzielić wiersze, które wstawiam w odpowiednich partiach?
Trzeba zapoznać się z dokumentacją tutaj: http://www.sqlite.org/limits.html – ebarrenechea
@ebarrenchea Jestem prawie pewien, że granica nie jest narzucona przez SQLite raczej z Android SQLite API. Czy znalazłeś jakieś wskazanie czegoś przeciwnego? –
Możesz podejść do tego przy pomocy wyszukiwania binarnego: 2000 nie działa, więc spróbuj 1000, potem 500 (lub 1500) ... – Sam