【发布时间】:2019-02-28 03:55:27
【问题描述】:
我有一个名为“TBL_EVO”的 SQLite 表,我想从“DATE_MODIFIED”列中获取最大值。通过以下查询,我在 SQLite 浏览器中得到了如下结果。
从“TBL_EVO”中选择最大(日期修改);
当我从应用程序的代码运行查询时,我得到了一个空指针异常。数据库与 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
【问题讨论】:
-
我认为 cursor.getString(0) 返回 null ,对吗?
-
能否添加测试的安卓手机版本?
-
println needs a message绝对是一个有趣的错误,表明内部出现问题。当你catch你的异常时,你是否也可以调用e.printStackTrace()来准确显示异常是在哪里引发的? -
What am I doing wrong?您将表名包含在 字符串分隔符 中,此处:... FROM 'TBL_EVO'。 -
@AnisBENNSIR 它已在 Android 7.0 模拟器上测试。
标签: android sqlite nullpointerexception cursor