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
verwendenandroid: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?
SQL funktioniert normal, nur in sqlite getestet. Warum benutzen Sie 'IFNULL' für max? –
wirklich, weiß es nicht. vielleicht weil "SELECT MAX (_itemPrice) FROM tablename" für mich nicht funktioniert. –
gerade auf sqliteonline getestet, es funktioniert gut. Aber ich habe keine Ahnung, warum es nicht unter Android Studio für mich funktioniert. –