由于不存在的列,强制关闭光标

时间:2011-11-18 08:33:12

标签: android database sqlite

好的,我在这里很难过。我收到一个错误,eclipse / android说我的应用程序崩溃了,因为表中不存在列。问题是,我没有使用它引用的列id,我找不到它为什么这样做的原因。

在我的数据库创建语句中:

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

在我的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 个答案:

答案 0 :(得分:1)

将create语句中的'id'更改为'_id',然后递增数据库版本。我认为它的工作正常

答案 1 :(得分:1)

_id是SQLite中的一个特殊列。通常,如果您不创建它,它会自动创建。

发生此错误是因为SimpleCursorAdapter需要名为_id的列。

要解决此问题,您可以

  • 更改您的查询,使其类似于:

    将DISTINCT ID选为_id ...

  • 或重新创建表格并将id重命名为_id

答案 2 :(得分:0)

这是因为当您没有添加id字段时,之前创建了表HISTORY_TABLE,因此_id会自动添加而不会立即更改。

解决方案是卸载应用并再次运行应用。现在将使用定义的id字段创建表。