我想要实现的基本思路是在SQlite数据库中对当前Android系统日期和现有日期进行比较。
想法是1.)如果数据库不包含包含今天日期的条目,则允许新条目
2.如果数据库已经包含从今天开始的条目,则撤销输入和输出错误消息。
我的DBAdapter目前有一个方法可以执行以下操作:
public Cursor getDate(String date) {
String where = KEY_DATE + "=" + date;
Cursor c = db.query(true, DATABASE_TABLE, ALL_KEYS,
where, null, null, null, null, null);
if (c !=null) {
c.moveToFirst();
}
return c;
}
和我用来进行比较的方法是:
public void addRecord (View view){
db.open();
Cursor cursor = db.getDate(dateString);
if (cursor.moveToFirst()){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Date");
builder.setMessage("Entry for today exists, would you like to update this instead?"); builder.setPositiveButton("OK", null);
@SuppressWarnings("unused")
AlertDialog dialog = builder.show();
db.close();
}
else{
Do other work..
使用此代码格式化用于比较的日期:
long longDate = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateString = sdf.format(longDate);
我只是在调用'dateString'
我的麻烦在于,即使我知道数据库中存在“日期”,它也不会执行正确的检查并完全跳过我的其他语句。我的SQL语句是否正确?
答案 0 :(得分:0)
尝试设置如下查询:
db.query(true, DATABASE_TABLE, ALL_KEYS, KEY_DATE + "=?", new String[] {date}, null, null, null, null);
答案 1 :(得分:0)
我在数据库中使用日期,但是我使用getDate()函数将它们保存为long值。 此外,我发现问题取决于您使用的Date变量的类型。 我喜欢java.util.Date,从不使用sql日期变量。 我做的数据和所有比较的条件都是getTime(),它是一个Long值。 使用从数据库获得的long值只需执行新的Date(longValue),这样就可以获得正确的日期变量。