Ошибка курсора в Android говорит, что колонки не существует

Мое приложение должно возвращать курсор, содержащий кучу кавычек, в зависимости от выбранного автора. Прямо сейчас, я жестко кодирую приложение, поэтому он вернет только цитаты одного автора.

Ошибка возникает в параметрах адаптера курсора, устанавливая столбец «to», он говорит мне, что этот столбец «quote» не существует.

Я попытался изменить параметр на KEY_QUOTE и даже попытался изменить имя фактического столбца базы данных, но все же теперь радость.

Что я делаю не так?

Ниже приведены блоки кода, используемые в этой операции.

  1. Создание таблицы базы данных, Цитаты
  2. Заполнение этой таблицы
  3. Запрос для котировок
  4. Открытие соединения с базой данных, создание курсора (где я получаю фактическую ошибку, с параметром «from»)

1.

 private static final String CREATE_QUOTE_TABLE = "create table " + QUOTES_TABLE + " (_id integer primary key autoincrement, " + "auth_name text not null, " + "myQuote text not null, " + "category text not null);"; 

2.

 public long populateQuotes(){ ContentValues initialValues = new ContentValues(); long[] rowIds = new long[authorName.length]; // Add wilson quotes category: Anthropology for(int i = 0; i < 3; i++){ initialValues.put(KEY_AUTHNAME, authorName[3]); initialValues.put(KEY_QUOTE, quoteRAW[i]); initialValues.put(KEY_CATEGORY, category[0]); rowIds[i] = qmDB.insertOrThrow(QUOTES_TABLE, null, initialValues); } // Add wilson quotes category: RAW for(int i = 3; i < 5; i++){ initialValues.put(KEY_AUTHNAME, authorName[3]); initialValues.put(KEY_QUOTE, quoteRAW[i]); initialValues.put(KEY_CATEGORY, category[1]); rowIds[i] = qmDB.insertOrThrow(QUOTES_TABLE, null, initialValues); } // Add wilson quotes category: Philosophy for(int i = 5; i < 11; i++){ initialValues.put(KEY_AUTHNAME, authorName[3]); initialValues.put(KEY_QUOTE, quoteRAW[i]); initialValues.put(KEY_CATEGORY, category[2]); rowIds[i] = qmDB.insertOrThrow(QUOTES_TABLE, null, initialValues); } // Add wilson quotes category: General Semantics for(int i = 11; i < 12; i++){ initialValues.put(KEY_AUTHNAME, authorName[3]); initialValues.put(KEY_QUOTE, quoteRAW[i]); initialValues.put(KEY_CATEGORY, category[3]); rowIds[i] = qmDB.insertOrThrow(QUOTES_TABLE, null, initialValues); } // Add wilson quotes category: Humor for(int i = 11; i < 12; i++){ initialValues.put(KEY_AUTHNAME, authorName[3]); initialValues.put(KEY_QUOTE, quoteRAW[i]); initialValues.put(KEY_CATEGORY, category[4]); rowIds[i] = qmDB.insertOrThrow(QUOTES_TABLE, null, initialValues); } return rowIds[0]; } 

3.

 public Cursor getQuotes(){ /* return qmDB.query(QUOTES_TABLE, new String[]{ KEY_QUOTE }, KEY_AUTHNAME + "=" + "'Robert Anton Wilson'", null, null, null, null);*/ //String who = authorName[position]; return qmDB.rawQuery("SELECT _id as _id from Quotes WHERE auth_name = ?", new String[]{"'Robert Anton Wilson'"}); } 

4.

 // Create DB connection and open. dbm = new MyDBManager(this); dbm.open(); // Call for the quotes to be queried, store results in cursor. myCursor = dbm.getQuotes(); myCursor.moveToFirst(); // Column quote does not exist? SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.quoterow, myCursor, new String[]{"myQuote"}, new int[]{R.id.quote}); this.setListAdapter(mAdapter); myCursor.close(); 

Для дальнейшего уточнения я включил журнал ошибок:

 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): FATAL EXCEPTION: main 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.QuoteMachine/com.QuoteMachine.Quote}: java.lang.IllegalArgumentException: column 'myQuote' does not exist 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.app.ActivityThread.access$2300(ActivityThread.java:135) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.os.Handler.dispatchMessage(Handler.java:99) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.os.Looper.loop(Looper.java:144) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.app.ActivityThread.main(ActivityThread.java:4937) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at java.lang.reflect.Method.invokeNative(Native Method) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at java.lang.reflect.Method.invoke(Method.java:521) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at dalvik.system.NativeStart.main(Native Method) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): Caused by: java.lang.IllegalArgumentException: column 'myQuote' does not exist 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:312) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:87) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at com.QuoteMachine.Quote.onCreate(Quote.java:42) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751) 05-01 18:38:13.876: ERROR/AndroidRuntime(1455): ... 11 more 

Solutions Collecting From Web of "Ошибка курсора в Android говорит, что колонки не существует"

В CREATE_QUOTE_TABLE вы используете «текст цитаты не null» и в показанном вами логарифме: вызван Caused by: java.lang.IllegalArgumentException: column 'myQuote' does not exist . Какова ценность KEY_QUOTE ? Он должен соответствовать имени столбца в таблице.

Проверьте этот запрос:

 return qmDB.rawQuery("SELECT _id, myQuote, auth_name, category FROM Quotes WHERE auth_name=?", new String[]{"'Robert Anton Wilson'"}); 

Я считаю, что ваша проблема заключалась не в том, что запрос пытался получить столбец, которого там не было. Проблема, которую я считаю, заключается в том, что созданный вами курсор не имеет всей информации, необходимой вашему адаптеру (т. Е. Это курсор, который не имеет столбца, а не таблицы).

Я не уверен на 100%, но это может быть потому, что в документации указано, что курсор, предназначенный для использования с CursorAdapter, должен содержать ссылку «_id».

Ваш оператор «quote» может завершиться неудачно, потому что «quote ()» – это имя функции – см. Основные функции .

Вместо этого попробуйте использовать, например, 'myQuote' в качестве имени столбца.