排序数据库查询后的空指针

时间:2011-08-25 14:46:05

标签: android sqlite nullpointerexception

我正在尝试查询我的数据库并按降序对起始列进行排序,然后获取第一行。

public Cursor getLowestEvent(){
    String sort = "SELECT * FROM " + EVENTS_TABLE + " ORDER_BY " + START + " DESC";

    Cursor c = db.query(EVENTS_TABLE, new String[] {ID,START},null,null,null,null,sort); //error
    if(c != null){
        c.moveToFirst();
    }
    return c;
}

这样做会给我一个空指针异常,我不知道为什么,数据库中有项目,所以它必须是我的排序问题?

08-25 11:03:14.503: ERROR/AndroidRuntime(2367): java.lang.NullPointerException
08-25 11:03:14.503: ERROR/AndroidRuntime(2367):     at com.app.notifyme.CalendarDB.getLowestEvent(CalendarDB.java:106)
08-25 11:03:14.503: ERROR/AndroidRuntime(2367):     at com.app.notifyme.Calendar$5.onClick(Calendar.java:162)
08-25 11:03:14.503: ERROR/AndroidRuntime(2367):     at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:873)
08-25 11:03:14.503: ERROR/AndroidRuntime(2367):     at android.widget.AdapterView.performItemClick(AdapterView.java:284)
08-25 11:03:14.503: ERROR/AndroidRuntime(2367):     at android.widget.ListView.performItemClick(ListView.java:3513)
08-25 11:03:14.503: ERROR/AndroidRuntime(2367):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:1849)
08-25 11:03:14.503: ERROR/AndroidRuntime(2367):     at android.os.Handler.handleCallback(Handler.java:587)
08-25 11:03:14.503: ERROR/AndroidRuntime(2367):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-25 11:03:14.503: ERROR/AndroidRuntime(2367):     at android.os.Looper.loop(Looper.java:123)
08-25 11:03:14.503: ERROR/AndroidRuntime(2367):     at android.app.ActivityThread.main(ActivityThread.java:3839)
08-25 11:03:14.503: ERROR/AndroidRuntime(2367):     at java.lang.reflect.Method.invokeNative(Native Method)
08-25 11:03:14.503: ERROR/AndroidRuntime(2367):     at java.lang.reflect.Method.invoke(Method.java:507)
08-25 11:03:14.503: ERROR/AndroidRuntime(2367):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
08-25 11:03:14.503: ERROR/AndroidRuntime(2367):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
08-25 11:03:14.503: ERROR/AndroidRuntime(2367):     at dalvik.system.NativeStart.main(Native Method)

3 个答案:

答案 0 :(得分:1)

请参阅this链接。您的最后一个参数(order by)不应该是一个ENTIRE sql语句(SELECT * FROM ...)。它应该被格式化为SQL ORDER BY子句。因为它说排除了ORDER BY本身,我认为它只是你想要订购的列和标识符来确定订购方式(“ID DESC”)。

  

如何对行进行排序,格式化为SQL ORDER BY子句(不包括   ORDER BY本身)。传递null将使用默认排序顺序,   这可能是无序的。

您构建查询的方式(在字符串“sort”中),您也可以执行db.rawQuery

编辑:解决问题的原因是在db.query()调用之前添加了db.open()。

答案 1 :(得分:1)

我认为以下工作会确保这一点 1]您的数据库已创建。 2]表存在。 3]你所提到的领域是存在的。

Cursor c = db.query(EVENTS_TABLE, new String[] {ID,START},null,null,null,null,START + " DESC")

答案 2 :(得分:0)

您正在向SELECT ...传递完整的db.query()声明。看起来您应该使用db.rawQuery()代替。阅读这些函数的文档以检查他们期望的参数。