我與Android Studio中SQLite的工作。
有REAL列的表。 這是物品的價格。
我也將有一些字符串值從Java下。
的Android + SQLite的:MAX返回0.0
String itemPrice;
但他們總是小數,因爲我用
android:inputType="numberDecimal"
我對這個真的很奇怪的方式開發它,只是因爲我想知道用戶是否添加了一個免費的價格或他輸入沒有。
所以,在第一種情況下,這將是0.0
而在第二種情況下,這將是空(或空字符串)
在總,它看起來像:
21414.0
null
123.0
null
null
如果我從SQLite的檢索值,根據Lod.d它看起來像:
21414.0
0.0
123.0
0.0
0.0
於是,我試圖找到MIN和MAX值。 MIN值的查找效果很好。 但MAX函數返回0.0。
public double getTheMostExpensiveOrder(){
double result = 0;
SQLiteDatabase sqLiteDatabase = getWritableDatabase();
String query = "SELECT MAX (IFNULL (" + COLUMN_ITEM_PRICE + " ,0)) AS MaxEO FROM " + TABLE_NAME
+ " WHERE " + COLUMN_DELIVERY_STATUS + " = " + "\"1\" LIMIT 1;";
Cursor cursor = sqLiteDatabase.rawQuery(query, null);
if (cursor.moveToFirst()){
result = cursor.getDouble(cursor.getColumnIndex("MaxEO"));
}
cursor.close();
return result;
}
public dobule getTheCheapestOrder(){
double result = 0;
SQLiteDatabase sqLiteDatabase = getWritableDatabase();
String query = "SELECT MIN (NULLIF (" + COLUMN_ITEM_PRICE + " ,0)) AS MinEO FROM " + TABLE_NAME
+ " WHERE " + COLUMN_DELIVERY_STATUS + " = " + "\"1\" LIMIT 1;";
Cursor cursor = sqLiteDatabase.rawQuery(query, null);
if (cursor.moveToFirst()){
result = cursor.getDouble(cursor.getColumnIndex("MinEO"));
}
cursor.close();
return result;
}
條件是100%的罰款,並在我的項目感。
至於我,我也嘗試玩雙,但沒有什麼是好的。
P.S.如果沒有空值,MAX工作正常。
---差不多就解決
更新:我剛剛發現,它與
SELECT _itemPrice FROM table WHERE _itemPrice < 1000000000000 ORDER BY _itemPrice DESC LIMIT 1;
那麼,問題是null作爲一個非常大的值SQLite的對待。是否有其他方法來解決它?
SQL工作正常,只是在sqlite中測試過。你爲什麼最大使用'IFNULL'? –
真的,不知道。也許是因爲「SELECT MAX(_itemPrice)FROM tablename」不適合我。 –
只是測試它在sqliteonline,它工作正常。但我不知道爲什麼它不適合我在Android Studio下工作。 –