2013-01-22 3 views
0

Я получил следующую трассировку стека через ACRA. Galaxy Note II, Android 4.1.2:Что вызывает исключение SQLite «целочисленное переполнение»?

android.database.sqlite.SQLiteException: integer overflow (code 1) 
at android.database.sqlite.SQLiteConnection.nativeExecuteForCursorWindow(Native Method) 
at android.database.sqlite.SQLiteConnection.executeForCursorWindow(SQLiteConnection.java:968) 
at android.database.sqlite.SQLiteSession.executeForCursorWindow(SQLiteSession.java:836) 
at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:62) 
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:143) 
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133) 
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:196) 
at android.database.AbstractCursor.moveToNext(AbstractCursor.java:244) 
: 
My app's methods 

Я никогда не видел это исключение раньше - кто-нибудь есть какие-либо идеи, что может быть причиной этого?

+0

Я только задает вопросы, если, после обширных исследований, я не могу придумать один на мой собственный. Это первый случай, когда кто-то действительно дал мне что-то полезное. Но спасибо за вашу заботу. –

ответ

1

Это может произойти в ситуациях, когда вы создаете число, которое больше размера, допускаемого для целого числа. Один из способов может произойти, если вы используете функции агрегации, такие как Sum. Если вы суммируете слишком много вещей, вы можете получить слишком большое число, которое переполняет размер целого числа.

Более подробную информацию можно найти здесь: http://www.sqlite.org/lang_aggfunc.html

+0

Хорошо, спасибо. Это совокупный запрос SUM. Я суммирую введенные пользователем данные. MAXINT кажется 2^63-1, и я допускаю отдельные записи 10^12-1. Я не уверен, как этот пользователь совершил облет, но он должен иметь. Во всяком случае, нельзя искусственно ограничивать то, что они входят. Тем не менее, есть ли способ избежать этого краха? - Я полагаю, что нет. –

+0

Хмм, не то, что я знаю или могу найти через Google. Единственное, что я мог подумать, - попытаться поймать исключение в коде приложения и показать пользователю какое-то максимальное количество или сообщение об ошибке, поскольку они действительно не должны вводить столько данных, если я понимаю вас правильно – lbrendanl

Смежные вопросы