2017-02-20 57 views
-1

Я работаю с 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 лечит нуль как чрезвычайно большое значение. Есть ли еще способ исправить это?

+0

SQL работает нормально, просто протестировал его в sqlite. Почему вы используете 'IFNULL' для max? –

+0

действительно, не знаю. возможно, потому что «SELECT MAX (_itemPrice) FROM tablename» не работает для меня. –

+0

просто протестировал его на sqliteonline, он отлично работает. Но я понятия не имею, почему он не работает внутри Android Studio для меня. –

ответ

0

Может ли это работать для вашего запроса, чтобы вернуть id и строку максимального элемента из COLUMN_ITEM_PRICE в вашей таблице?

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

Будет ли это работать так?Строковый запрос = "SELECT * FROM" + TABLE_NAME + "WHERE COLUMN_ITEM_PRICE = (SELECT MAX (COLUMN_ITEM_PRICE) FROM" + TABLE_NAME + ")"; – J2112O

+0

@ J2112O java.lang.IllegalStateException: Не удалось прочитать строку 0, col -1 из CursorWindow. Перед доступом к данным убедитесь, что курсор инициализирован правильно. Это из-за SELECT * –