Java 正在将SQLite数据库中的初始列值设置为0
我正在制作一个应用程序,其中我有一个特定的复选框,称为“满油箱”。如果我选中此框,我必须计算里程值并将其保存到数据库中。如果未选中中的复选框,则不会计算里程,并且里程列中存储0。但是,当我第一次进入数据库时,我希望里程数为0,无论是否选中复选框 有谁能帮我这个主意吗? 下面是我已经尝试过的正常运行时间,但这段代码也会生成第一行的里程数:-Java 正在将SQLite数据库中的初始列值设置为0,java,android,Java,Android,我正在制作一个应用程序,其中我有一个特定的复选框,称为“满油箱”。如果我选中此框,我必须计算里程值并将其保存到数据库中。如果未选中中的复选框,则不会计算里程,并且里程列中存储0。但是,当我第一次进入数据库时,我希望里程数为0,无论是否选中复选框 有谁能帮我这个主意吗? 下面是我已经尝试过的正常运行时间,但这段代码也会生成第一行的里程数:- public void calculateMileage(FuelExpense fe) { // TODO Auto-g
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);
}
如果是第一行,您可以检查,如:
//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
如果我理解正确的话 如果数据库中只有一个条目,则不希望计算,只显示一个零 我认为你需要做的就是改变这一点:
if(mileageCursor!=null && mileageCursor.getCount()>0
为此:
if(mileageCursor!=null && mileageCursor.getCount()>1
然后,如果数据库中只有一个条目,则计算结果将为0。
我认为您的代码会崩溃,因为您只有一个条目,但它试图调用光标上的
moveToPrevious()
。什么类型的数据库?某些数据库可能具有默认值value@lordkain这是一个SQLite数据库您是如何插入第一行的?@Tarun为了清晰起见,我添加了更多的代码。.当您第一次插入时,请看一看,要么不要在内容值中填充里程数,要么用0填充里程数。谢谢您的解释。我在下面试用了哈里什的苏蒂翁,似乎效果也不错。谢谢你抽出时间