SQLite SELECT MAX() 查询将 null 返回到游标?

SQLite SELECT MAX() query returns null to cursor?

提问人:MSeiz5 提问时间:9/24/2018 最后编辑:PhantômaxxMSeiz5 更新时间:9/26/2018 访问量:312

问:

我有一个名为“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;
}

洛卡特

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
Android SQLite NullPointerException 游标

评论

0赞 Radesh 9/24/2018
我认为cursor.getString(0)返回null,对吗?
0赞 Anis BEN NSIR 9/24/2018
您能否添加测试过的Android手机版本?
1赞 Michael Dodd 9/24/2018
println needs a message这绝对是一个有趣的错误,表明内部出了问题。当您出现异常时,您能否调用以准确显示抛出异常的位置?catche.printStackTrace()
0赞 Phantômaxx 9/25/2018
What am I doing wrong?您将表名括在字符串分隔符中,此处为:.... FROM 'TBL_EVO'
0赞 MSeiz5 9/25/2018
@AnisBENNSIR 它已在 Android 7.0 模拟器上进行测试。

答:

1赞 user1506104 9/25/2018 #1

将 your 替换为:queryMaxDate

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

评论

0赞 MSeiz5 9/25/2018
感谢您的建议。但我仍然遇到同样的错误。
0赞 user1506104 9/25/2018
请做 e.printStackTrace();然后发布日志。
-1赞 MSeiz5 9/26/2018 #2

我解决了这个问题。 问题是,我在异步任务中做了一个新的SQLConnection。

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