2017-02-20 88 views
-1

我與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的對待。是否有其他方法來解決它?

+0

SQL工作正常,只是在sqlite中測試過。你爲什麼最大使用'IFNULL'? –

+0

真的,不知道。也許是因爲「SELECT MAX(_itemPrice)FROM tablename」不適合我。 –

+0

只是測試它在sqliteonline,它工作正常。但我不知道爲什麼它不適合我在Android Studio下工作。 –

回答

0

難道這工作爲您查詢到從你的表格中COLUMN_ITEM_PRICE返回的最大項目的ID和行?

String query = "SELECT * FROM " +TABLE_NAME + " WHERE id = (SELECT MAX(COLUMN_ITEM_PRICE) FROM " +TABLE_NAME+")"; 
+0

它不會工作,因爲'MAX'返回的不是id,而是最大值。 'SELECT MAX(123,213);'=>'213'。 –

+0

它會這樣工作嗎?String query =「SELECT * FROM」+ TABLE_NAME +「WHERE COLUMN_ITEM_PRICE =(SELECT MAX(COLUMN_ITEM_PRICE)FROM」+ TABLE_NAME +「)」; – J2112O

+0

@ J2112O java.lang.IllegalStateException:無法從CursorWindow讀取第0行,第1列。在從中訪問數據之前,確保Cursor已正確初始化。 由於SELECT * –