2012-06-17 49 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