SQLite SELECT MAX()查询向游标返回null吗?

时间:2018-09-24 15:29:39

标签: android sqlite nullpointerexception cursor

我有一个名为“ TBL_EVO”的SQLite表,我想在其中从“ DATE_MODIFIED”列中获取最大值。通过以下查询,我在SQLite浏览器中得到了如下结果。

从'TBL_EVO'中选择MAX(DATE_MODIFIED);

enter image description here enter image description here

当我从应用程序中的代码运行查询时,我得到了nullpointerexception。数据库绝对类似于SQLBrowser中的数据库。 因此DATE_MODIFIED及其值存在。 它在cursor.moveToFirst();崩溃。 即使我被if(cursor.moveToFirst())包围 当我这样做时,代码跳到其他地方。 我在做什么错了?

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

2 个答案:

答案 0 :(得分:1)

将您的queryMaxDate替换为:

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

答案 1 :(得分:-1)

我解决了这个问题。 问题是,我在asynctask中做了一个新的SQLConnection。

我不得不在Asynctask中打开一个新连接。