Android - SQLite比较系统在数据库中的日期

时间:2014-02-18 17:48:55

标签: android database sqlite date comparison

我想要实现的基本思路是在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语句是否正确?

2 个答案:

答案 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),这样就可以获得正确的日期变量。