我有一个初始化的SQLite表。这是一个单行实现。
public void onCreate(SQLiteDatabase db) {
String query = "CREATE TABLE " + TABLE_PRODUCTS + "(" +
COLUMN_ID + " INTEGER PRIMARY KEY DEFAULT 1, " +
COLUMN_PRODUCTNAME + " TEXT ," +
COLUMN_DATE + " TEXT " +
");";
db.execSQL(query);
}
我以这种方式更新行。
public void updateRow(int id, Products product){
ContentValues values = new ContentValues();
values.put(COLUMN_ID, id);
values.put(COLUMN_PRODUCTNAME, product.get_productname());
values.put(COLUMN_DATE, getDateTime());
SQLiteDatabase db = getWritableDatabase();
db.replace(TABLE_PRODUCTS, null, values);
db.close();
}
最初,我没有COLUMN_DATE
。我在原件正常工作后加了它。当我想检查一下是否有效时,我向屏幕上吐了一个字符串。这适用于COLUMN_PRODUCTNAME
,这是执行此操作的功能。
public String prodToString(){
String dbString = "";
SQLiteDatabase db = getWritableDatabase();
String query = "SELECT * FROM " + TABLE_PRODUCTS + " WHERE 1";
Cursor c = db.rawQuery(query, null);
c.moveToFirst();
dbString = c.getString(c.getColumnIndex(COLUMN_PRODUCTNAME));
db.close();
return dbString;
}
但是当我在名称dateToString()
下复制上述完全相同的函数时,只将COLUMN_PRODUCTNAME
更改为COLUMN_DATE
并调用所述函数,我收到错误:
Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 2 columns.
java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.
Make sure the Cursor is initialized correctly before accessing data from it.
我怀疑它与getDateTime()
函数有什么关系,因为我可以输出那么好。我是否正确地把它放到桌子上仍然不清楚,但从这个意义上说它看起来还不错。我不确定出了什么问题。有谁能看到它?