Called: java.lang.IllegalArgumentException: column '_id' does not exist

I want to show my table using cursor and list. but I got an error.

Caused by: java.lang.IllegalArgumentException: column '_id' does not exist 

but I did not declare _id in my application. can someone help me?

this is my code in dbHelper.

 public Cursor DataPesanKeluar() { Cursor c = dba.rawQuery( " SELECT " + kel_id + "," + e_chiperteks + "," + k_nama + "," + kel_waktu + " FROM " + tbPesan + " INNER JOIN " + tbPesanKeluar + " ON " + tbPesan + "." + p_idpesan + "=" + tbPesanKeluar + "." + kel_idpesan + " INNER JOIN " + tbEnkrip + " ON " + tbPesan + "." + p_idenkrip + "=" + tbEnkrip + "." + e_idenkrip + " INNER JOIN " + tbKontak + " ON " + tbPesan + "." + p_idkontak + "=" + tbKontak + "." + k_id , null); return c; } 

and this is my class for displaying data.

 listKeluar = (ListView)findViewById(R.id.listKeluar); String [] keluar = { data.k_nama, data.m_chiperteks, data.kel_waktu }; int[] k = { R.id.tNama, R.id.tChiper, R.id.tWaktu }; cursor = data.DataPesanKeluar(); SimpleCursorAdapter keluarAdapter = new SimpleCursorAdapter( this, R.layout.baris_keluar, cursor, keluar, k ); //this is my error listKeluar.setAdapter(keluarAdapter); listKeluar.setOnItemClickListener( new OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { Cursor listCursor = (Cursor) arg0.getItemAtPosition(arg2); String idkeluar = listCursor.getString(listCursor.getColumnIndex(data.kel_id)); String nama = listCursor.getString(listCursor.getColumnIndex(data.k_nama)); String chiperteks = listCursor.getString(listCursor.getColumnIndex(data.m_chiperteks)); String waktu = listCursor.getString(listCursor.getColumnIndex(data.kel_waktu)); 
+4
source share
4 answers

The cursor must contain a column named _id or this class will not work.

You might try to fake it using your existing ID:

 Cursor c = dba.rawQuery( " SELECT " + kel_id + " AS _id," + kel_id + "," + e_chiperteks + "," + k_nama + "," + kel_waktu + " FROM " + tbPesan + " INNER JOIN " + tbPesanKeluar + " ON " + tbPesan + "." + p_idpesan + "=" + tbPesanKeluar + "." + kel_idpesan + " INNER JOIN " + tbEnkrip + " ON " + tbPesan + "." + p_idenkrip + "=" + tbEnkrip + "." + e_idenkrip + " INNER JOIN " + tbKontak + " ON " + tbPesan + "." + p_idkontak + "=" + tbKontak + "." + k_id , null); 
+14
source

Make key_id as "_id"

 public Cursor DataPesanKeluar() { Cursor c = dba.rawQuery( " SELECT " + kel_id + " AS _id" + "," + e_chiperteks + "," + k_nama + "," + kel_waktu + " FROM " + tbPesan + " INNER JOIN " + tbPesanKeluar + " ON " + tbPesan + "." + p_idpesan + "=" + tbPesanKeluar + "." + kel_idpesan + " INNER JOIN " + tbEnkrip + " ON " + tbPesan + "." + p_idenkrip + "=" + tbEnkrip + "." + e_idenkrip + " INNER JOIN " + tbKontak + " ON " + tbPesan + "." + p_idkontak + "=" + tbKontak + "." + k_id , null); return c; 

}

+5
source

Just remove kel_id + "," from your select statement, because the table you are trying to get data from does not contain the column "_id".

0
source

Add _id INTEGER PRIMARY KEY AUTOINCREMENT to the create table statement. Android sometimes requires _id field

0
source

All Articles