2012-06-17 46 views
0

好的,現在的情況:我創建了一個擴展Android類SQLOpenHelper類的類。我還實現了所需的方法onCreateonUpgrade,以初始化表並刪除當前表,然後分別重新創建新表。已成功創建Android SQLite找不到聲明的列

的表,但是當我試圖調用一個方法來插入新的記錄到數據庫中的logcat給了我這個來代替:

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 

我做了關於這個問題的一些搜索。大多數答案建議重新安裝應用程序並重復此過程。完成,但仍然沒有成功。

這裏是我的SQLiteOpenHelper onCreate方法:

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(); 
     } 

    } 

我是相當新的Android和使用this tutorial爲指導。

在此先感謝! :)

+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