IllegalArgumentException что не так?
Main Activity
import androidx.appcompat.app.AppCompatActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
ListView userList;
TextView header;
DBHelper databaseHelper;
SQLiteDatabase db;
Cursor userCursor;
SimpleCursorAdapter userAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
header = (TextView)findViewById(R.id.header);
userList = (ListView)findViewById(R.id.list);
databaseHelper = new DBHelper(getApplicationContext());
}
@Override
public void onResume() {
super.onResume();
// открываем подключение
db = databaseHelper.getReadableDatabase();
//получаем данные из бд в виде курсора
userCursor = db.rawQuery("select * from "+ DBHelper.TABLE, null);
// определяем, какие столбцы из курсора будут выводиться в ListView
String[] headers = new String[] {DBHelper.COLUMN_ID, DBHelper.COLUMN_NAME, DBHelper.COLUMN_YEAR};
// создаем адаптер, передаем в него курсор
userAdapter = new SimpleCursorAdapter(this, android.R.layout.two_line_list_item,
userCursor, headers, new int[]{android.R.id.text1, android.R.id.text2}, 0);
header.setText("Найдено элементов: " + String.valueOf(userCursor.getCount()));
userList.setAdapter(userAdapter);
}
@Override
public void onDestroy(){
super.onDestroy();
// Закрываем подключение и курсор
db.close();
userCursor.close();
}
}
DBHelper
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "userstore.db"; // название бд
private static final int SCHEMA = 1; // версия базы данных
static final String TABLE = "users"; // название таблицы в бд
// названия столбцов
public static final String COLUMN_ID = "_id";
public static final String COLUMN_NAME = "name";
public static final String COLUMN_YEAR = "year";
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, SCHEMA);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE users (" + COLUMN_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_NAME
+ " TEXT, " + COLUMN_YEAR + " INTEGER);");
// добавление начальных данных
db.execSQL("INSERT INTO "+ TABLE +" (" + COLUMN_NAME
+ ", " + COLUMN_YEAR + ") VALUES ('Том Смит', 1981);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+TABLE);
onCreate(db);
}
}
Выдает:
java.lang.IllegalArgumentException: column '_id' does not exist. Available columns: [id, name, year]
Где я ошибся? -_-