2017-02-20 4 views
-1

Ich arbeite mit SQLite in Android Studio.
Haben Sie eine Tabelle mit REAL Spalte. Es sind die Preise von Artikeln.
Und ich habe da einige String Werte unter Java.
Android + SQLite: MAX liefert 0.0

String itemPrice; 

Aber sie sind immer dezimal, weil ich

verwenden
android:inputType="numberDecimal" 

ich es diese wirklich seltsame Art und Weise entwickle, nur weil ich, ob Benutzer wissen will, einen kostenlosen Preis hinzugefügt oder er getippt nichts.
also im ersten Fall wird es 0,0
während im zweiten Fall sein, wird es leer sein (oder leere Zeichenkette)

Insgesamt sieht es so aus:

21414.0 
null 
123.0 
null 
null 

Wenn ich abrufen von Werten von SQLite, nach Lod.d es aussieht:

21414.0 
0.0 
123.0 
0.0 
0.0 

Dann versuche ich, MIN und MAX-Werte zu finden. Das Finden von MIN-Wert funktioniert großartig. Aber MAX-Funktion gibt 0.0 zurück.

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; 
} 

Zustand ist zu 100% in Ordnung und hat einen Sinn in meinem Projekt. Für mich habe ich auch versucht, mit Double zu spielen, aber nichts war gut.

P.S. Wenn keine Nullwerte vorhanden sind, funktioniert MAX einwandfrei.

--- GELÖST NAHEZU

UPDATE: Ich habe gerade, dass es mit

SELECT _itemPrice FROM table WHERE _itemPrice < 1000000000000 ORDER BY _itemPrice DESC LIMIT 1; 

Also, das Problem funktioniert, ist SQLite behandelt null als extrem großen Wert. Gibt es eine andere Möglichkeit, es zu beheben?

+0

SQL funktioniert normal, nur in sqlite getestet. Warum benutzen Sie 'IFNULL' für max? –

+0

wirklich, weiß es nicht. vielleicht weil "SELECT MAX (_itemPrice) FROM tablename" für mich nicht funktioniert. –

+0

gerade auf sqliteonline getestet, es funktioniert gut. Aber ich habe keine Ahnung, warum es nicht unter Android Studio für mich funktioniert. –

Antwort

0

Könnte dies für Ihre Abfrage funktionieren, um die ID und die Zeile des Max-Elements aus dem COLUMN_ITEM_PRICE in Ihrer Tabelle zurückzugeben?

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

Es wird nicht funktionieren, weil 'MAX' nicht ID, sondern maximalen Wert zurückgibt. 'SELECT MAX (123, 213);' => '213'. –

+0

Würde es so funktionieren?Zeichenfolgenabfrage = "SELECT * FROM" + TABLE_NAME + "WHERE COLUMN_ITEM_PRICE = (SELECT MAX (COLUMN_ITEM_PRICE) VON" + TABLE_NAME + ")"; – J2112O

+0

@ J2112O java.lang.IllegalStateException: Zeile 0, Spalte -1 von CursorWindow konnte nicht gelesen werden. Stellen Sie sicher, dass der Cursor korrekt initialisiert ist, bevor Sie auf Daten zugreifen. Es 'wegen SELECT * –