2012-06-17 4 views
0

좋아요, 여기 상황이 있습니다 : Android의 SQLOpenHelper 클래스를 확장 한 클래스를 만들었습니다. 또한 필요한 메소드 인 onCreateonUpgrade을 구현하여 테이블을 초기화하고 현재 테이블을 삭제 한 다음 새 테이블을 각각 다시 작성했습니다.Android SQLite 선언 된 열을 찾을 수 없습니다.

테이블이 성공적으로 작성하지만 데이터베이스 로그 캣에 새로운 레코드를 삽입하는 메소드를 호출하려고 할 때 나 대신이 준되었다 :

06-17 21:31:19.907: I/SqliteDatabaseCpp(561): sqlite returned: error code = 1, msg = table calendarEvents has no column named colour, db=/data/data/stub.binusitdirectorate.calendar/databases/calendarSQLite 

나는이 문제에 관한 몇 가지 검색을 수행했습니다. 대부분의 답변은 앱을 다시 설치하고 프로세스를 반복하도록 제안했습니다. 완료되었지만 여전히 성공하지 못했습니다. 여기

public void onCreate(SQLiteDatabase db) { 
      String CREATE_EVENTS_TABLE = "CREATE TABLE " + EVENTS_TABLE + "(" 
        + KEY_EVENTS_TYPE_ID + " TEXT PRIMARY KEY," 
        + KEY_EVENTS_TYPE_NAME + " TEXT," + KEY_EVENTS_NAME + " TEXT," 
        + KEY_EVENTS_COLOR + "TEXT," + KEY_EVENTS_START_DATE + "DATE," 
        + KEY_EVENTS_END_DATE + "TEXT" + ")" 

      db.execSQL(CREATE_EVENTS_TABLE); 
     } 

그리고 새 레코드를 삽입하기위한 나의 방법이다 :

public void addEventsList(ArrayList<CalendarEventData> lstCalendarEvents) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     if (lstCalendarEvents != null && db != null) { 
      for (int i = 0; i < lstCalendarEvents.size(); i++) { 
       ContentValues values = new ContentValues(); 

       values.put(KEY_EVENTS_TYPE_ID, lstCalendarEvents.get(i) 
         .getEventTypeId()); 
       values.put(KEY_EVENTS_TYPE_NAME, lstCalendarEvents.get(i) 
         .getEventTypeName()); 
       values.put(KEY_EVENTS_NAME, lstCalendarEvents.get(i) 
         .getEventName()); 
       values.put(KEY_EVENTS_COLOR, lstCalendarEvents.get(i) 
         .getColour()); 
       values.put(KEY_EVENTS_START_DATE, DateUtils 
         .getFormattedDateString(lstCalendarEvents.get(i) 
           .getStartDateTime(), dateFormat)); 
       values.put(KEY_EVENTS_END_DATE, DateUtils 
         .getFormattedDateString(lstCalendarEvents.get(i) 
           .getEndDateTime(), dateFormat)); 

       db.insert(EVENTS_TABLE, null, values); 
      } 

      db.close(); 
     } 

    } 

나는 안드로이드 비교적 새로운 해요 및 가이드로 this tutorial을 사용했다가

여기 내 SQLiteOpenHelper onCreate 방법입니다.

미리 감사드립니다. :) 당신의 생성 문

+0

보조 노트에 전에 공백이 누락 문제

KEY_EVENTS_COLOR + "TEXT," + KEY_EVENTS_START_DATE + "DATE," + KEY_EVENTS_END_DATE + "TEXT" + ")" 

가 발생할 수 있습니다 :'문자열 KEY_EVENTS_COLOR'는 "컬러"를 포함하고 있습니다. 그래서 오타가 아닙니다 :) – rhadri

답변

2

이 부분은 사방 TEXT :

+0

와우. 절대로 생각하지 못했지만 SQLite는 동적 타이핑을 사용하고 데이터 유형을 필요로하지 않습니다. 데이터 유형을 지정하더라도 다른 것들을 삽입 할 수 있다는 사실에 더욱 놀랐습니다. 예를 들어 int 열에 문자열을 삽입 할 수 있습니다. 이 동작은 [여기] (http://www.sqlite.org/datatype3.html#affinity) – niko

+0

에 설명되어 있습니다. 고마운 친구! 범인은 너무 작을 것이라고 생각하지 않았을 것입니다 - 단순한 공간! – rhadri

관련 문제