2016-07-07 2 views
1

все. Я работаю над одним заданием с SQLite. Я очень благодарен за помощь.Ошибка SQLite SQLite «нет такого столбца»

Ситуация очень простая SQL-запрос, но не работает

public class TasksDBHelper extends SQLiteOpenHelper { 

    private static final String LOGTAG = "Task Manager"; 

    public static final String DB_COL_TITLE = "title"; 
    public static String DB_COL_DESCRIPTION = "description"; 
    public static String DB_COL_DUEDATE = "duedate"; 
    public static String DB_COL_CATEGORY = "category"; 
    public static String DB_COL_PRIORITY = "priority"; 
    public static String DB_COL_BODY = "body"; 

    public static String DB_COL_ID = BaseColumns._ID; //same as setting to "_id" 
    public static final String[] DB_ALL_COLUMNS = { DB_COL_ID, DB_COL_TITLE, DB_COL_DESCRIPTION, DB_COL_DUEDATE, 
                DB_COL_CATEGORY, DB_COL_PRIORITY}; 

    private static final String DB_NAME = "my_tasks.db"; 
    public static final String DB_TABLE = "tasks"; 
    private static final int DB_VERSION = 1; 

    private static final String DB_TABLE_CREATE = 
      "CREATE TABLE tasks (" + 
        DB_COL_ID + " integer primary key autoincrement," + 
        DB_COL_TITLE + " text not null," + 
        DB_COL_DESCRIPTION + " text not null," + 
        DB_COL_DUEDATE + " text not null," + 
        DB_COL_CATEGORY + " text not null," + 
        DB_COL_PRIORITY + " text not null);"; 

    private static TasksDBHelper INSTANCE; 
    public static TasksDBHelper getInstance(Context ctx){ 
     if (INSTANCE == null) 
      INSTANCE = new TasksDBHelper(ctx.getApplicationContext()); 

     return INSTANCE; 
    } 

    private TasksDBHelper(Context context) { 
     super(context, DB_NAME, null, DB_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     Log.d(LOGTAG, "onCreate() of the SQLite Demo"); 
     db.execSQL(DB_TABLE_CREATE); 
     Log.d(LOGTAG, "Notes DB table created"); 
     //Populate with some sample notes 
     ContentValues cv = new ContentValues(); 
     for (int i = 0; i < 10; i++) { 
      cv.put(DB_COL_TITLE, String.format("Title : %d", i)); 
      cv.put(DB_COL_DESCRIPTION, String.format("Body : %d", i)); 
      cv.put(DB_COL_DUEDATE, String.format("Body : %d", i)); 
      cv.put(DB_COL_CATEGORY, String.format("Body : %d", i)); 
      cv.put(DB_COL_PRIORITY, String.format("Body : %d", i)); 
      db.insert(DB_TABLE, null, cv); 
     } 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE); 
     onCreate(db); 
    } 

    /////CRUD Methods 

    public Task createTask(Task task) { 
     Log.d(LOGTAG, "Calling createNote()"); 

     SQLiteDatabase db = getWritableDatabase(); 
     ContentValues cv = new ContentValues(); 

     cv.put(TasksDBHelper.DB_COL_TITLE, task.getTitle()); 
     cv.put(TasksDBHelper.DB_COL_DESCRIPTION, task.getDescription()); 
     cv.put(TasksDBHelper.DB_COL_DUEDATE, task.getDuedate()); 
     cv.put(TasksDBHelper.DB_COL_CATEGORY, task.getCategory()); 
     cv.put(TasksDBHelper.DB_COL_PRIORITY, task.getPriority()); 

     long id = db.insert(TasksDBHelper.DB_TABLE, null, cv); 
     task.setId(id); 
     Log.d(LOGTAG, "Task created : " + id); 
     return task; 
    } 

    public int updateTask(Task task) { 
     Log.d(LOGTAG, "Calling updateNote()"); 

     SQLiteDatabase notesDB = getWritableDatabase(); 
     ContentValues cv = new ContentValues(); 

     cv.put(TasksDBHelper.DB_COL_TITLE, task.getTitle()); 
     cv.put(TasksDBHelper.DB_COL_DESCRIPTION, task.getDescription()); 
     cv.put(TasksDBHelper.DB_COL_DUEDATE, task.getDuedate()); 
     cv.put(TasksDBHelper.DB_COL_CATEGORY, task.getCategory()); 
     cv.put(TasksDBHelper.DB_COL_PRIORITY, task.getPriority()); 
     return notesDB.update(TasksDBHelper.DB_TABLE, cv, TasksDBHelper.DB_COL_ID + "=" + task.getId(), null); 
    } 


    public ArrayList<Task> getTasks() { 
     Log.d(LOGTAG, "Calling getTasks()"); 
     SQLiteDatabase notesDB = getReadableDatabase(); 
     Cursor c = null; 
     ArrayList<Task> tasks = new ArrayList<Task>(); 



     try { 
      //c = notesDB.query(TasksDBHelper.DB_TABLE, TasksDBHelper.DB_ALL_COLUMNS, null, null, null, null, null); 
      String query = String.format("SELECT _id, %s, %s, %s, %s, %s FROM %s", 
      TasksDBHelper.DB_COL_TITLE, TasksDBHelper.DB_COL_DESCRIPTION, TasksDBHelper.DB_COL_DUEDATE, 
        TasksDBHelper.DB_COL_CATEGORY, TasksDBHelper.DB_COL_PRIORITY, TasksDBHelper.DB_TABLE); 

      c = notesDB.rawQuery(query, null); 

      if ((c != null) && c.getCount() > 0) { 
       while(c.moveToNext()) 
        tasks.add(getNoteFromCursor(c)); 
      } 
     } 
     finally 
     { 
      if (c != null) 
       c.close(); 
     } 
     return tasks; 
    } 


    public Task getTask(long rowId) { 
     Cursor c = null; 
     Task task = null; 
     Log.d(LOGTAG, "Calling getNote()"); 
     SQLiteDatabase tasksDB = getReadableDatabase(); 

     try { 
      c = tasksDB.query(TasksDBHelper.DB_TABLE, new String[] 
          { TasksDBHelper.DB_COL_ID, TasksDBHelper.DB_COL_TITLE, 
            TasksDBHelper.DB_COL_DESCRIPTION, TasksDBHelper.DB_COL_DUEDATE, 
            TasksDBHelper.DB_COL_CATEGORY, TasksDBHelper.DB_COL_PRIORITY}, 
        TasksDBHelper.DB_COL_ID + "=" + rowId, null, null, null, null); 
      if (c != null) 
       c.moveToFirst(); 
      task = getNoteFromCursor(c); 
      return task; 

     } catch (Exception e) { 
      Log.e(LOGTAG, "Error on getNote()", e); 
     } 
     finally { 
      if (c != null) 
       c.close(); 
     } 
     return task; 

    } 

    public boolean delete(long rowId) { 
     SQLiteDatabase notesDB = getWritableDatabase(); 
     return notesDB.delete(TasksDBHelper.DB_TABLE, TasksDBHelper.DB_COL_ID + "=" + rowId, null) > 0; 
    } 


    private static Task getTaskFromCursor(Cursor c){ 
     if ((c == null) || (c.getCount() == 0)) 
      return null; 
     else { 
      Task task = new Task(); 
      task.setId(c.getLong(c.getColumnIndex(TasksDBHelper.DB_COL_ID))); 
      task.setTitle(c.getString(c.getColumnIndex(TasksDBHelper.DB_COL_TITLE))); 
      task.setdescription(c.getString(c.getColumnIndex(TasksDBHelper.DB_COL_DESCRIPTION))); 
      task.setdescription(c.getString(c.getColumnIndex(TasksDBHelper.DB_COL_DUEDATE))); 
      task.setdescription(c.getString(c.getColumnIndex(TasksDBHelper.DB_COL_CATEGORY))); 
      task.setdescription(c.getString(c.getColumnIndex(TasksDBHelper.DB_COL_PRIORITY))); 
      return task; 
     } 

    } 
} 

07-06 00: 35: 23,621 5558-5558 /? E/AndroidRuntime: FATAL EXCEPTION: main Процесс: com.comp3617.assignment3.chiseongoh, PID: 5558 java.lang.RuntimeException: Не удалось запустить активность ComponentInfo {com.comp3617.assignment3.chiseongoh/com.comp3617.assignment3. chiseongoh.DisplayTasksActivity}: android.database.sqlite.SQLiteException: нет такого столбца: title (код 1): при компиляции: SELECT _id, title, description, duedate, категория, приоритет FROM задач на android.app. ActivityThread.performLaunchActivity (ActivityThread.java:2416) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) at android.app.ActivityThread.-wrap11 (ActivityThread.java) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1344) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:148) на android.app.ActivityThread.main (ActivityThread.java:5417) на java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java : 726) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) Вызвано: android.database.sqlite.SQLiteException: нет такого столбца: заголовок (код 1): при компиляции: SELECT _id, название, описание, duedate, категория, приоритет у ОТ задач на android.database.sqlite.SQLiteConnection.nativePrepareStatement (Родной метод) в android.database.sqlite.SQLiteConnection.acquirePreparedStatement (SQLiteConnection.java:887) в android.database.sqlite.SQLiteConnection.prepare (SQLiteConnection .java: 498) на android.database.sqlite.SQLiteSession.prepare (SQLiteSession.java:588) на android.database.sqlite.SQLiteProgram. (SQLiteProgram.java:58) на android.database.sqlite.SQLiteQuery. (SQLiteQuery.java:37) на android.database.sqlite.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.java:44) на android.database.sqlite.SQLiteDatabase.rawQu eryWithFactory (SQLiteDatabase.java:1316) на android.database.sqlite.SQLiteDatabase.rawQuery (SQLiteDatabase.java:1255) на com.comp3617.assignment3.chiseongoh.db.TasksDBHelper.getTasks (TasksDBHelper.java:128) на com.comp3617.assignment3.chiseongoh.DisplayTasksActivity.bindListViewToNotes (DisplayTasksActivity.java:76) на com.comp3617.assignment3.chiseongoh.DisplayTasksActivity.onCreate (DisplayTasksActivity.java:71) at android.app.Activity.performCreate (Activity. java: 6237) at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1107) at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2369) at androi d.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) на android.app.ActivityThread.-wrap11 (ActivityThread.java) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1344) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:148) на android.app. ActivityThread.main (ActivityThread.java:5417) по адресу java.lang.reflect.Method.invoke (собственный метод) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) at com .android.internal.os.ZygoteInit.main (ZygoteInit.java:616)

Ошибки при здесь

public Task getTask(long rowId) { 
     Cursor c = null; 
     Task task = null; 
     Log.d(LOGTAG, "Calling getNote()"); 
     SQLiteDatabase tasksDB = getReadableDatabase(); 

     try { 
      c = tasksDB.query(TasksDBHelper.DB_TABLE, new String[] 
          { TasksDBHelper.DB_COL_ID, TasksDBHelper.DB_COL_TITLE, 
            TasksDBHelper.DB_COL_DESCRIPTION, TasksDBHelper.DB_COL_DUEDATE, 
            TasksDBHelper.DB_COL_CATEGORY, TasksDBHelper.DB_COL_PRIORITY}, 
        TasksDBHelper.DB_COL_ID + "=" + rowId, null, null, null, null); 
      if (c != null) 
       c.moveToFirst(); 
      task = getNoteFromCursor(c); 
      return task; 

     } catch (Exception e) { 
      Log.e(LOGTAG, "Error on getNote()", e); 
     } 
     finally { 
      if (c != null) 
       c.close(); 
     } 
     return task; 

    } 

Спасибо!

ответ

1

Вы можете изменить DB_VERSION или uninstall старое приложение на вашем устройстве, затем reinstall. Я думаю, что в этом устройстве существовала старая база данных без столбца заголовка.

+0

Спасибо! Ты прав! Раньше я использовал старый пример. Спасибо! –

0

Возможно, вы можете запустить свой код в эмуляторе, а затем перетащить файл db. Затем откройте файл в «SQLite Expert», чтобы узнать, содержит ли эта таблица столбец «title».

+0

Благодарим вас за комментарий! –

Смежные вопросы