类似的SQLite toString()函数产生不同的结果?

时间:2016-02-28 18:57:14

标签: java android mysql database sqlite

我有一个初始化的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()函数有什么关系,因为我可以输出那么好。我是否正确地把它放到桌子上仍然不清楚,但从这个意义上说它看起来还不错。我不确定出了什么问题。有谁能看到它?

0 个答案:

没有答案