Я работаю с SQLite в Android Studio.
Стол с REAL столбец. Это цены на предметы.
И я положил туда String значения из 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 отлично работает.
--- ПОЧТИ решаемые
UPDATE: Я только что обнаружил, что он работает с
SELECT _itemPrice FROM table WHERE _itemPrice < 1000000000000 ORDER BY _itemPrice DESC LIMIT 1;
Итак, проблема SQLite лечит нуль как чрезвычайно большое значение. Есть ли еще способ исправить это?
SQL работает нормально, просто протестировал его в sqlite. Почему вы используете 'IFNULL' для max? –
действительно, не знаю. возможно, потому что «SELECT MAX (_itemPrice) FROM tablename» не работает для меня. –
просто протестировал его на sqliteonline, он отлично работает. Но я понятия не имею, почему он не работает внутри Android Studio для меня. –