【发布时间】:2021-09-14 13:31:35
【问题描述】:
我试图选择表中“月”和“年”相同的所有列。 rawQuery(query,args) 方法接收一个 string[] 数组,其中一个查询将营地替换为“?”。
这是我的一些尝试:
"SELECT * FROM EXPENSES WHERE strftime('%m', EXPENSE_DATE)=" + month + " AND strftime('%y',EXPENSE_DATE) =" + year;
和
"SELECT * FROM EXPENSES WHERE strftime('%Y/%m', 'EXPENSE_DATE') =" + year + "/" + month;
最后一个带有“?”用相关方法替换 args:
String[] selectionArgs = new String[]{String.valueOf(year), String.valueOf(month)};
Cursor cursor = database.rawQuery("SELECT * FROM expenses WHERE expense_date >='?-?-01' AND expense_date <='?-?-31'", selectionArgs);
在问题再次出现后,我发现问题是视图的对象给出了一个DATE,而系统给出了另一种格式。
基本上我有一个 CALENDARVIEW 给我的数据格式(“00-0-00”),如果变量为空,程序将获取系统日期,它给我日期格式(“00-00 -00")
填写空日期的代码是这样的:
//Get the default TIMEZONE
calendar = Calendar.getInstance();
//Set the format date
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
date = simpleDateFormat.format(calendar.getTime());
日历是这样的:
calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
date = year + "-" + (month + 1) + "-" + dayOfMonth;//the Time will be blanck
}
});
解决办法是:
calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
// the date was being save as 00-0-00 instead of 00-00-00
if (month >10) {
date = year + "-" + (month + 1) + "-" + dayOfMonth;//the Time will be blanck
}else {
date = year + "-0" + (month + 1) + "-" + dayOfMonth;//the Time will be blanck
}
}
});
对于android中的数据库刚刚使用strf:
String[] selectionArgs = new String[]{String.valueOf(year), String.valueOf(month)};
String sql = "SELECT * FROM EXPENSES WHERE "+
"strftime('%Y', EXPENSE_DATE) = ? AND strftime('%m', EXPENSE_DATE) + 0 = ? + 0";
Cursor c = db.rawQuery(sql, selectionArgs);
谢谢大家的帮助!
【问题讨论】:
标签: java android sqlite android-sqlite strftime