好的,我在这里很难过。我收到一个错误,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'不存在
答案 0 :(得分:1)
将create语句中的'id'更改为'_id',然后递增数据库版本。我认为它的工作正常
答案 1 :(得分:1)
_id
是SQLite中的一个特殊列。通常,如果您不创建它,它会自动创建。
发生此错误是因为SimpleCursorAdapter
需要名为_id
的列。
要解决此问题,您可以
更改您的查询,使其类似于:
将DISTINCT ID选为_id ...
或重新创建表格并将id
重命名为_id
答案 2 :(得分:0)
这是因为当您没有添加id字段时,之前创建了表HISTORY_TABLE,因此_id会自动添加而不会立即更改。
解决方案是卸载应用并再次运行应用。现在将使用定义的id字段创建表。