2017-01-16 24 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

我試圖用你正在寫的東西。它和以前的作品一樣。現在我發現了我的主要錯誤。請閱讀我的帖子。 –

相關問題