2011-12-19 3 views
3

6 개의 열이있는 표가 있습니다. 열 3 개에서만 모든 행을 가져와 배열에 저장하려고합니다. 내 쿼리는 다음과 같습니다필드 슬롯에 대한 요청이 잘못되었습니다. SQLite - Android

다음
public Cursor fetchInfo(long rowId) throws SQLException 
    { 
     Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {"_id", "xCoord", "yCoord", "color"}, "_id" + "=" + rowId, null, null, null, null, null); 

     if(mCursor != null) 
     { 
      mCursor.moveToFirst(); 
     } 
     return mCursor; 
    } 

내가 지금처럼 전화 해요 :

12-19 15:40:36.903: E/CursorWindow(276): Bad request for field slot 0,4. numRows = 1, numColumns = 4 
12-19 15:40:36.903: D/AndroidRuntime(276): Shutting down VM 
12-19 15:40:36.912: W/dalvikvm(276): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
12-19 15:40:36.922: E/AndroidRuntime(276): FATAL EXCEPTION: main 
12-19 15:40:36.922: E/AndroidRuntime(276): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.x17.projects.strikezone/com.x17.projects.strikezone.SavedEntries}: java.lang.IllegalStateException: get field slot from row 0 col 4 failed 
12-19 15:40:36.922: E/AndroidRuntime(276): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
12-19 15:40:36.922: E/AndroidRuntime(276): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
12-19 15:40:36.922: E/AndroidRuntime(276): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
12-19 15:40:36.922: E/AndroidRuntime(276): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
12-19 15:40:36.922: E/AndroidRuntime(276): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-19 15:40:36.922: E/AndroidRuntime(276): at android.os.Looper.loop(Looper.java:123) 
12-19 15:40:36.922: E/AndroidRuntime(276): at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-19 15:40:36.922: E/AndroidRuntime(276): at java.lang.reflect.Method.invokeNative(Native Method) 
12-19 15:40:36.922: E/AndroidRuntime(276): at java.lang.reflect.Method.invoke(Method.java:521) 
12-19 15:40:36.922: E/AndroidRuntime(276): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
12-19 15:40:36.922: E/AndroidRuntime(276): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
12-19 15:40:36.922: E/AndroidRuntime(276): at dalvik.system.NativeStart.main(Native Method) 
12-19 15:40:36.922: E/AndroidRuntime(276): Caused by: java.lang.IllegalStateException: get field slot from row 0 col 4 failed 
12-19 15:40:36.922: E/AndroidRuntime(276): at android.database.CursorWindow.getDouble_native(Native Method) 
12-19 15:40:36.922: E/AndroidRuntime(276): at android.database.CursorWindow.getFloat(CursorWindow.java:451) 
12-19 15:40:36.922: E/AndroidRuntime(276): at android.database.AbstractWindowedCursor.getFloat(AbstractWindowedCursor.java:123) 
12-19 15:40:36.922: E/AndroidRuntime(276): at com.x17.projects.strikezone.SavedEntries.getInfo(SavedEntries.java:76) 
12-19 15:40:36.922: E/AndroidRuntime(276): at com.x17.projects.strikezone.SavedEntries.onCreate(SavedEntries.java:46) 
12-19 15:40:36.922: E/AndroidRuntime(276): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
12-19 15:40:36.922: E/AndroidRuntime(276): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
12-19 15:40:36.922: E/AndroidRuntime(276): ... 11 more 
:

그러나
private void getInfo() 
    { 
     Cursor mCursor = mDbHelper.fetchInfo(mRowId); 
     x = new float[mCursor.getCount()]; 
     y = new float[mCursor.getCount()]; 
     color = new int[mCursor.getCount()]; 

     if(mCursor.moveToFirst()) 
     { 
      for(int i = 0; i < mCursor.getCount(); i++) 
      { 
       x[i] = mCursor.getFloat(3); 
       y[i] = mCursor.getFloat(4); //Line 76, this is where the error is occurs. 
       color[i] = mCursor.getInt(5); 
      } 
     } 
     mCursor.close(); 
    } 

내가 이것을 실행하려고하면, 내가 말하는 오류가

나는 데이터베이스를 처음 사용하므로이를 수정하는 방법을 모르겠습니다. 이 문제를 해결하기 위해 여러 가지 방법을 시도했지만 성공하지는 못했습니다. 여기서 내가 뭘 잘못하고 있니? 나는 이것을 다르게해야 할까?

답변

4

fetchInfo() 방법의 쿼리에서 DB Table에서 4 개의 열을 얻고 있습니다. - 대상 열의 0 인덱스

인덱스 : 문서가 getFloat(int index)를 말하듯

이 방법은 인덱스로서 기대한다. 다음과 같이

그래서 당신은 인덱스를 사용한다 :

0-_id

1 - xCoord

2 - yCoord

3 - color

+0

아에 대한 나는 그것이 열 번째 열이라고 생각했다. e 테이블 자체를 쿼리 대신 사용합니다. 감사! – user990230

관련 문제