Принудительное закрытие курсора из-за несуществующего столбца - PullRequest
1 голос
/ 18 ноября 2011

Хорошо, я здесь довольно тупой.Я получаю сообщение об ошибке, eclipse / android говорит, что мое приложение падает, потому что в таблице не существует столбца.Проблема в том, что я не использую идентификатор столбца, который он цитирует, и я не могу найти причину, почему он делает это.

В моем выражении создания БД:

 private static final String CREATE_HISTORY_TABLE=
            " create table if not exists  " + HISTORY_TABLE +
            " (id integer primary key autoincrement," +
            " DebtName text, Date date, Payment real )";

Вmy onCreate:

 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.paymenthistory_dialog);
  Bundle extras = getIntent().getExtras();
  String debtname = extras.getString(DbAdapter.KEY_DEBT);
  String[] from = new String[]{ DbAdapter.KEY_HISTORY_DATE, DbAdapter.KEY_HISTORY_PAYMENT};
  int[] to = new int[]{R.id.PAYMENTDATE, R.id.PAYMENTDATE};
  ListView paymenthistory = (ListView)findViewById(R.id.paymenthistorylist);
  DatabaseHelper db = new DatabaseHelper(this);
  Cursor PaymentsCursor = db.getReadableDatabase().rawQuery("SELECT * FROM tblPaymentHistory WHERE DebtName = '"+debtname+"'", null);
---> SimpleCursorAdapter HistoryAdapter = new SimpleCursorAdapter(PaymentHistory.this, R.layout.paymenthistoryrow, PaymentsCursor, from, to);
          paymenthistory.setAdapter(HistoryAdapter);
}   

В строке со стрелкой есть ошибка.Я открыл базу данных в браузере sqlite, и в качестве имени столбца у него есть «id», но я постоянно получаю следующую ошибку в eclipse при проверке своей активности:

11-18 00: 26: 40.775: E / AndroidRuntime (18419): вызвано: java.lang.IllegalArgumentException: столбец '_id' не существует

Ответы [ 3 ]

1 голос
/ 18 ноября 2011

Измените 'id' в операторе создания на '_id', затем увеличьте версию базы данных. Я думаю, что она отлично работает

1 голос
/ 18 ноября 2011

_id - это специальный столбец в SQLite. Обычно он создается автоматически, если вы его не создаете.

Эта ошибка возникает из-за того, что SimpleCursorAdapter нужен столбец с именем _id.

Чтобы это исправить, вы можете либо

  • Измените ваши запросы так, чтобы они были похожи на:

    ВЫБЕРИТЕ DISTINCT id как _id ...

  • Или воссоздать таблицу и переименовать id в _id

0 голосов
/ 18 ноября 2011

Это потому, что таблица HISTORY_TABLE создавалась ранее, когда вы не добавляли поле id, поэтому _id добавляется автоматически, а не изменяется сейчас.

решение - удалить приложение и запустить приложение снова.Теперь таблица будет создана с определенным полем id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...