基于SQLite的应用程序中的错误。使用日期。 Android的

时间:2017-01-16 06:55:04

标签: android sql sqlite

所有! 我的代码: 此方法需要检查当前日期,如果更改它将在db。中创建新记录。

 public static void updateHintBase(SQLiteOpenHelper database)
    {
        String currentDate = getDateInString();
        SQLiteDatabase db = database.getReadableDatabase();
        Cursor cursor = db.query("HINTS",
                new String[]{"CURRENT_DATE"},
                "CURRENT_DATE = ?",
                new String[]{currentDate},
                null, null, null);
        int countRow = cursor.getCount();
        cursor.close();
        if (countRow==0)
        {
            ContentValues values = new ContentValues();
            values.put("CURRENT_DATE", currentDate);
            values.put("SPENT", 0);
            values.put("TOTAL", TOTAL_HINTS);
            db.insert("HINTS", null, values);
        }
        db.close();
    }

此方法将date转换为String:

 private static String getDateInString()
    {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String date = sdf.format(new Date());
        return date;
    }

表格结构:

db.execSQL("CREATE TABLE HINTS (CURRENT_DATE TEXT PRIMARY KEY , "
                    + "SPENT INTEGER,"
                    + "TOTAL INTEGER);");

但我的代码不起作用。第一次它工作,但第二次更改日期时,我的第一个方法无论如何都在光标中找到元素......

例如:

1)今天16.01.2017。我的申请已经执行。一切都很好。

2)今天18.01.2017。我的应用程序已执行,我希望方法 cursor.getCount()将返回给我 0 ,并且将创建具有新日期的新行。但它返回给我 1。等。

3 个答案:

答案 0 :(得分:0)

您可能必须将光标设置为cursor.MoveToNext()在获取可能存在问题的信息之前,您还要关闭光标。最后,循环光标是获取更多信息的最有效方法。

答案 1 :(得分:0)

请尝试此查询:

cursor = db.rawQuery("select count(YOUR_ID) from HINTS where CURRENT_DATE = ? ", new String[] {currentDate});

答案 2 :(得分:0)

哦!我发现了自己的错误! Word“CURRENT_DATE”由SQL保留。 https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions037.htm#SQLRF00628 这就是我的代码工作不正确的原因。 我将“CURRENT_DATE”更改为“TODAY”,现在它可以正常工作。