在我的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;
}
答案 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语句以及一些如何将数据放入数据库并将其拉出的示例。)