2017-10-21 5 views
0

저는 android studio에서 SQLite Database로 작업하고 있습니다. 내에서 onCreate 코드 :작동하지 않는 쿼리

@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_MOODS_TABLE = "CREATE TABLE " + TABLE_NAME_MOODS + "(" 
      + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_MOODS + " TEXT NOT NULL)"; 
    db.execSQL(CREATE_MOODS_TABLE); 
} 

내 쿼리 :

@Override 
public Uri insert(@NonNull Uri uri, ContentValues values) { 

    final SQLiteDatabase db = mMindsDbHelper.getWritableDatabase(); 
    final SQLiteDatabase db2 = mMindsDbHelper.getReadableDatabase(); 
    long id = db.insert(TABLE_NAME_MOODS, null, values); 
    String query = "SELECT * FROM "+ TABLE_NAME_MOODS; 
    Cursor returnCursor; 
    returnCursor = db2.rawQuery(query, null); 
    return null; 
} 

디버깅 목적을 위해 나는이 곳에서 선택 쿼리를 추가했습니다. 디버거가이 점에 도달하면 db.insert의 return id는 일부 값 (즉, 새로 삽입 된 값의 ID)을 반환합니다. 그러나 select 쿼리는 아무 것도 반환하지 않습니다 (mCount는 -1을 반환합니다). 다음 쿼리도 시도하지만 결과는 동일합니다.

returnCursor = db.query(TABLE_NAME_MOODS, 
        projection, 
        selection, 
        selectionArgs, 
        null, 
        null, 
        sortOrder); 

어디에 문제가 있습니까?

+1

커서'returnCursor'를 얻었지만 실제로는 아무것도하지 않습니다. 이 커서를 반복 해 보았습니까? –

+0

@TimBiegeleisen 디버그 창에서 returnCursor의 모든 세부 정보를 보여줍니다. 그리고 열 이름 만 반환하고 mCount는 -1로 반환합니다. –

+0

@EnigmaticMind 커서로 뭔가를 할 때까지 커서가 표시됩니다. 'returnCursor.getCount();'줄을 추가 한 다음 null로 돌아갑니다. 디버그에서. 그런 다음 카운트가 표시됩니다. 'returnCursor.movetoFirst()'를 라인 (등)으로 사용해 볼 수도 있습니다. 이 유용한 [일반적인 SQLite 문제를 해결하는 데 도움이되는 방법이 있습니까?] (https://stackoverflow.com/questions/46642269/are-there-any-methods-that-assist-with-resolving-common)도 있습니다. -sqlite-issues) – MikeT

답변

1

그러나 선택 쿼리는

rawQuery() 쿼리를 컴파일하지만 실행하지 않습니다 (가 -1로은 mcount을 반환) 아무것도 유용 반환하지 않습니다. 따라서 아직 실행되지 않은 쿼리에 대해서는 개수가 -1입니다. 기본적으로 rawQuery()에 대한 래퍼이기 때문에 query()에도 동일하게 적용됩니다. 실행 및 레코드가 일치하지 않은 쿼리가 카운트가 실제로 rawQuery() 컴파일 쿼리의 적어도 하나의 단계를 실행하려면 0

로 설정된 것입니다, 당신은 반환 CursormoveTo...() 방법 중 하나를 호출해야합니다. 예 : moveToFirst().

+0

고마워. 그것은 내 시간을 절약했다. –