2013-08-14 3 views
3

Я создаю приложение, где у меня есть определенный флажок под названием «Полный бак». Если я поставлю флажок, я должен вычислить пробег значения и сохранить его в базе данных. Если поле не проверено, пробег не вычисляется, а 0 сохраняется в столбце пробега. Однако, когда я делаю первый вход в свою базу данных, я хочу, чтобы пробег был равен 0 независимо от того, установлен ли флажок или нет.Установка начального значения столбца в базе данных SQLite до 0

Может ли кто-нибудь помочь мне с идеей? Heres то, что я пытался uptil сейчас, но этот код генерирует пробег для первого ряда, а также: -

public void calculateMileage(FuelExpense fe) 
    { 

     // TODO Auto-generated method stub 
     String [] columns = new String[]{KEY_ROW_ID, KEY_KM, KEY_FUEL_QTY, KEY_FUEL_PRICE, KEY_TOTAL_COST, KEY_MILEAGE, KEY_DATE,KEY_TANK_FULL}; 

     long numRows = DatabaseUtils.queryNumEntries(ourDatabase, "fuel_table"); 
     if(fe.getTankFullstatus()==true) 
     { 
      mileageCursor = ourDatabase.rawQuery("SELECT * FROM fuel_table ORDER BY _id DESC LIMIT 1", null); 

      if(mileageCursor!=null && mileageCursor.getCount()>0) 
      { 

       mileageCursor.moveToLast(); 

       String lastKm = mileageCursor.getString(1); 
       String lastFuelQty = mileageCursor.getString(2); 

       lastDBFuelEntry.setKm(Long.parseLong(lastKm)); 
       lastDBFuelEntry.setFuelQty(Double.parseDouble(lastFuelQty)); 
      } 
      else 
      { 
       mileage = 0.0d; 
      } 

     } 
     else 
     { 

      for(mileageCursor.moveToLast();!mileageCursor.isBeforeFirst();mileageCursor.moveToPrevious()) 
      { 
       nftQty = nftQty+lastDBFuelEntry.getFuelQty(); 

      } 

     } 
     fuelUsed = nftQty + fe.getFuelQty(); 
     mileage =(fe.getKm() - lastDBFuelEntry.getKm())/ fuelUsed; 
     mileage= (double)(Math.round(mileage*100))/100; 
     fe.setMileage(mileage); 
     } 

Table creation:- 
//Fuel info table 
      db.execSQL("CREATE TABLE "+FUEL_DATABASE_TABLE +" (" + 
        KEY_ROW_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        KEY_KM + " LONG NOT NULL, "+ 
        KEY_FUEL_QTY + " INTEGER NOT NULL, "+ 
        KEY_FUEL_PRICE + " DOUBLE NOT NULL, "+ 
        KEY_TOTAL_COST + " DOUBLE NOT NULL, "+ 
        KEY_MILEAGE + " DOUBLE DEFAULT 0, "+ 
        KEY_DATE + " DATE NOT NULL, "+ 
        KEY_TANK_FULL + " TEXT);" 
        ); 

Insert:- 
{ 
     // TODO Auto-generated method stub 


     ContentValues cv = new ContentValues(); 
     cv.put(KEY_KM, fe.getKm()); 
     cv.put(KEY_FUEL_QTY, fe.getFuelQty()); 
     cv.put(KEY_FUEL_PRICE,fe.getFuelPrice()); 
     cv.put(KEY_TOTAL_COST, fe.getTotalCost()); 
     cv.put(KEY_MILEAGE, fe.getMileage()); 
     cv.put(KEY_DATE, fe.getFuelFilledDate()); 
     cv.put(KEY_TANK_FULL, fe.getTankFullstatus()); 
     return ourDatabase.insert(FUEL_DATABASE_TABLE, null, cv); 
    } 
+1

какая база данных? Возможно, для некоторой базы данных значение по умолчанию – lordkain

+0

@lordkain Это база данных SQLite –

+0

Как вы вставляете свою первую строку? – Tarun

ответ

0

Вы можете проверить , если это первая строка как:

//Fetch row count in FUEL_DATABASE_TABLE before insertion 
if(ROW_COUNT == 0) 
    Insert into FUEL_DATABASE_TABLE (... KEY_MILEAGE ...) values (... 0 ...); 
else 
    // Insert what you want 
+0

Спасибо за помощь .. Это сработало !! –

1

Если Я правильно вас понимаю,

Если у вас есть только одна запись в вашей базе данных, вы не хотите вычислять и просто показывать нуль.

Я думаю, что все, что вам нужно сделать, это изменить:

if(mileageCursor!=null && mileageCursor.getCount()>0 

к этому:

if(mileageCursor!=null && mileageCursor.getCount()>1 

И затем, если у вас есть только одна запись в базе данных, полученный расчет будет 0. Я бы предположил, что ваш код freaking, потому что у вас есть только одна запись, но она пытается вызвать moveToPrevious() на вашем курсоре.

+0

Благодарим вас за приятное объяснение. Я попробовал вдохновение ниже, и это, похоже, сработало. Благодарю за то, что вы хотя –

Смежные вопросы