Android SQlite日期没有一年?

时间:2012-12-04 23:10:36

标签: android sqlite

在我的Android应用中,我正在尝试根据日期从我的数据库中检索字符串。但我不希望在日期中的那一年(这样我只需要365行)。我使用它的唯一方法是在我的数据库中,将Date列中的日期设置为yyyyMMdd格式。如果我将Date列中的所有日期更改为MMdd格式,则两位数月份(如10月,11月,12月)可以正常工作,但是像Jan.或9月(01,09)这样的单个数字月份会使应用程序崩溃错误CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0。我在数据库中尝试过格式MM-dd,yyyy-MM-dd,它们会使应用程序崩溃并出现上面列出的错误。是不是可以在Sqlite数据库中使用MMdd格式化日期?有什么想法吗?

MainActivity:

    DBT = new SimpleDateFormat("MMdd", Locale.US);
tMMddStr = DBT.format(new Date(System.currentTimeMillis()));

private void getTH() {

    dba.open();
    tArray = dba.getTHA(tMMddStr);
    dba.close();
    optionB_TV.setText(todayArray[2]);
    hideDayAtv.setText(todayArray[1]);
    hideYearAtv.setText(todayArray[0]);

}

将对DBAdapter:

    public String[] getTHA(String tMMddStr) {   
    String[] columns = new String[] { KEY_Y, KEY_MD, KEY_HA };
    Cursor cursor = db.query(DB_TABLE, columns, KEY_DATE + "=" + tMMddStr,
            null, null, null, null);

    if (cursor != null) {
        cursor.moveToFirst();
        String hapT[] = new String[3];
        hapT[0] = cursor.getString(0);
        hapT[1] = cursor.getString(1);
        hapT[2] = cursor.getString(2);
        cursor.close();
        this.db.close();
        return hapT;
    }
    return null;
}

1 个答案:

答案 0 :(得分:1)

CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

此错误意味着您正在尝试读取 Cursor,只需在尝试读取之前检查Cursor是否有任何数据:

if (cursor != null && cursor.moveToFirst()) {

就单个数字月份问题而言,这可能与KEY_DATE列的数据类型有关。如果KEY_DATE是任何类型的数字,它将删除第一个0。尝试对tMMddStr执行相同的操作 (如果这没有帮助,请发布表格CREATE语句以及一些如何将数据放入数据库并将其拉出的示例。)