Запрос SQLite SELECT MAX () возвращает нуль курсору?

У меня есть таблица SQLite под названием «TBL_EVO», где я хочу получить наибольшее значение из столбца «DATE_MODIFIED». С помощью следующего запроса я получил результат в браузере SQLite, как показано ниже.

ВЫБРАТЬ МАКС. (ДАТА_МОДИФИЦИРОВАНО) ИЗ 'TBL_EVO';

Запрос SQLite SELECT MAX () возвращает нуль курсору?Запрос SQLite SELECT MAX () возвращает нуль курсору?

Когда я запускаю запрос из кода своего приложения, я получаю исключение nullpointerexception. База данных абсолютно такая же, как и в SQLBrowser. Итак, DATE_MODIFIED существует со своими значениями. Вылетает на cursor.moveToFirst();. Даже когда я окружаю его if (cursor.moveToFirst()) Когда я это делаю, код переходит на else. Что я делаю неправильно?

MainActivity.java

MySQLiteHelper db = new MySQLiteHelper(this);
String strDateTime = db.strSelectMaxDate(TableNames[intTableIDStart]);
Log.v("TBL_EVO_DATE_TIME: ", "-> "+strDateTime);

MySQLiteHelper.java - strSelectMaxDate

public String strSelectMaxDate(String strTable){
    String strValueFromDB = "";
    String queryMaxDate = "SELECT MAX(DATE_MODIFIED) FROM '" + strTable+"'";
    Log.v("TBL_EVO_DATE_TIME_QUERY", queryMaxDate);
    try{
        db = this.getReadableDatabase();
        cursor = db.rawQuery(queryMaxDate, null);
        cursor.moveToFirst();
        if (cursor == null){
            strValueFromDB = "cursorisnull";
            Log.v("TBL_EVO_DATE_TIME_VAL1", strValueFromDB);
        }else {
            strValueFromDB = cursor.getString(0);
            Log.v("TBL_EVO_DATE_TIME_VAL2", cursor.getString(0));
        }
    }catch(Exception e){
        Log.v("TBL_EVO_DATE_TIME_ERROR", "-> "+e);
        strValueFromDB = "error: "+e;
    }finally{
        cursor.close();
        db.close();
    }
    return strValueFromDB;
}

Logcat

09-24 15:24:23.207 21900-21917/com.spicysoftware.goexpert V/TBL_EVO_DATE_TIME_QUERY: SELECT MAX(DATE_MODIFIED) FROM 'TBL_EVO'
09-24 15:24:23.216 21900-21917/com.spicysoftware.goexpert V/TBL_EVO_DATE_TIME_ERROR: -> java.lang.NullPointerException: println needs a message
09-24 15:24:23.216 21900-21917/com.spicysoftware.goexpert V/TBL_EVO_DATE_TIME:: -> error: java.lang.NullPointerException: println needs a message

Я думаю, что cursor.getString (0) вернет null, я прав?

Radesh 24.09.2018 17:37

не могли бы вы добавить версию протестированного телефона Android?

Anis BEN NSIR 24.09.2018 17:38
println needs a message - определенно интересная ошибка, предполагающая, что что-то не так с внутренними компонентами. Когда вы catch свои исключения, можете ли вы также вызвать e.printStackTrace(), чтобы показать, где именно выбрасывается исключение?
Michael Dodd 24.09.2018 17:39
What am I doing wrong? Вы заключаете имя таблицы в разделители строк, здесь: ... FROM 'TBL_EVO'.
Phantômaxx 24.09.2018 20:15

@AnisBENNSIR Это было протестировано на эмуляторе Android 7.0.

MSeiz5 25.09.2018 09:36

@ MSeiz5, не могли бы вы добавить оператор создания таблицы и подтвердить, что у всех сырых данных DATE_MODIFIED не равно нулю! на самом деле, я думаю, что max всегда будет возвращать необработанный, он будет нулевым, если группа содержит нулевое значение ... sqlite.org/lang_aggfunc.html

Anis BEN NSIR 25.09.2018 14:17
2
6
249
2

Ответы 2

Замените ваш queryMaxDate на:

String queryMaxDate = "SELECT MAX(DATE_MODIFIED) FROM " + strTable;

Спасибо за ваше предложение. Но у меня все та же ошибка.

MSeiz5 25.09.2018 09:35

пожалуйста, сделайте e.printStackTrace (); внутри вашего оператора catch, затем опубликуйте журнал.

user1506104 25.09.2018 10:08

Я решил проблему. Проблема заключалась в том, что я сделал новое соединение SQLConnection в асинхронной задаче.

Мне пришлось открыть новое соединение в Asynctask.

Другие вопросы по теме