2017-01-16 48 views
0

全部! 我的代码: 此方法需要检查当前日期,如果它被更改,它会在db中创建新记录。我的基于SQLite的应用程序中的错误。使用日期。 Android

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(); 
    } 

这种方法转换日期字符串:

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)今天,2017年1月16日。我的应用程序已执行。一切都很好。

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

回答

0

您可能必须将光标设置为cursor.MoveToNext()您也可以在获取可能是问题的信息之前关闭光标。最后遍历光标是获得更多信息的最有效方式。

+0

谢谢你,我同意你的看法......但是我在得到Count Of Row后关闭了游标。而在另一个代码中,我真的使用循环。但在这段代码中,我只需要获取关于当前日期的现有行的信息。 –

0

请尝试此查询:

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

刚才我试了一下。结果是一样的。第一次运作。但是当我在智能手机中更改日期并再次运行应用程序时。调试模式显示计数= 1 ...我看到该行在每次查询后都会改变自己... –

+0

因为您使用的是cursor.getCount();而不是尝试使用此if(cursor.moveToFirst())countRow = cursor.getInt(0); } – android

+0

我试图用你正在写的东西。它和以前的作品一样。现在我发现了我的主要错误。请阅读我的帖子。 –

相关问题