복붙노트

[SQL] CursorWindow를 할당 할 수 없습니다

SQL

CursorWindow를 할당 할 수 없습니다

내 안드로이드 응용 프로그램에서 sqlite3를 데이터베이스에서 운영하고있다. 난 그냥 20 만 행과 14 열이 전 인구가 데이터베이스에서 읽습니다. 항목은 단어입니다. 모든 컬럼의 데이터 유형은 텍스트입니다. 11 글자로 단어를 최대 쿼리 (예. 포기는) 잘 작동합니다. 그러나 12 이상 (예를 들면. 각화)에 대한 응용 프로그램이 충돌합니다. 여기에 로그 캣은 다음과 같습니다

Could not allocate CursorWindow '//data//data//com.example.myapp//databases//database.sqlite' of size 2097152 due to error -12.
threadid=11: thread exiting with uncaught exception (group=0x40adf9f0)
FATAL EXCEPTION: Thread-2883
android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=861 (# cursors opened by this proc=861)
at android.database.CursorWindow.<init>(CursorWindow.java:104)
at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:162)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:156)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:161)
at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:201)
at com.example.myapp.MainActivity.query(MainActivity.java:815)
at com.example.myapp.MainActivity$2.run(MainActivity.java:356)
at java.lang.Thread.run(Thread.java:856)

암호:

query = "select * from words where col_1 = \"" + (myWord)+ "\";";
cursor = database.rawQuery(query, null);
if (cursor != null)                                          
    cursor.moveToFirst(); // line 815
if (!cursor.isAfterLast()) {
    do {
        for (i = 1; i < cursor.getColumnCount(); i++) {
            temp = cursor.getString(i);
            //other stuff
        }
    } while (cursor.moveToNext());
    cursor.close();
}

그래서 오류 의미합니까 왜 응용 프로그램의 충돌은?

해결법

  1. ==============================

    1.오류 -12 수단이 누출 커서. Pls는 가까운 그것은 다음과 같은 시도 :

    오류 -12 수단이 누출 커서. Pls는 가까운 그것은 다음과 같은 시도 :

    try {....} finally {  cursor.close();}
    
  2. ==============================

    2.나는 루프에서 quering했다. 그리고 루프 내에서 커서를 닫고 외부의 문제가 해결되지.

    나는 루프에서 quering했다. 그리고 루프 내에서 커서를 닫고 외부의 문제가 해결되지.

  3. ==============================

    3.안드로이드 커서 모두를 메모리에 쿼리 결과를 읽고, 해당 데이터 1 메가 바이트 제한이 있습니다.

    안드로이드 커서 모두를 메모리에 쿼리 결과를 읽고, 해당 데이터 1 메가 바이트 제한이 있습니다.

    데이터의 양이 가능성이 앱이 모바일 장치에서 느리게 실행 만들 수 있기 때문에이 제한은 선택되었다.

    당신이해야 가능한 경우 :

  4. from https://stackoverflow.com/questions/17495713/could-not-allocate-cursorwindow by cc-by-sa and MIT license