Android cursor error tells me that column does not exist

My application should return a cursor containing a bunch of quotes, depending on the author selected. Right now I'm hard-coding the application, so it will return only one quote from the author.

An error occurs in the cursor adapter settings by setting the "to" column, it tells me that this "quote" column does not exist.

I tried changing the parameter to KEY_QUOTE and even tried changing the name of the actual database column, but still joy now.

What am I doing wrong?

The following are the blocks of code used in this operation.

  • Creating a database table, Quotes
  • Filling in this table
  • Request for quotes.
  • Opening a database connection, creating a cursor (where I get the actual error with the "from" parameter)

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

For further clarification, I turned on the error log:

 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 
+6
source share
3 answers

In CREATE_QUOTE_TABLE you use the "quote text is not null", but in the logarithm that you show: Caused by: java.lang.IllegalArgumentException: column 'myQuote' does not exist . What is the value of KEY_QUOTE ? It must match the column name in the table.

Check this request:

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

I believe that your problem was not that the request tried to get a column that was not there. The problem that I believe is that the cursor you created does not have all the information your adapter needs (i.e. it is a cursor that does not have a column, not a table).

+6
source

I am not 100% sure, but this may be because the documentation states that the cursor intended for use with the CursorAdapter must contain the "_id" link.

+2
source

Your quote statement may fail because quote () is the name of the function - see main functions .

Try using for example. 'myQuote' instead of the column name.

0
source

Source: https://habr.com/ru/post/887061/


All Articles