2014-12-29 6 views
-1

У меня есть метод нижеНулевые значения, возвращаемые из курсора

public Date getLastPaidInvoiceDate(int id) 


{ 
    String selectQuery =" SELECT max(Rental_invoices.enddate) as DD from Rental_invoices "+ 
          " where Rental_invoices._id in(select invoice_id from RentalPayments)"+ 
          " and Rental_invoices.tenancy_id"+"="+ id; 

    Log.e("sql",selectQuery); 

SQLiteDatabase db = this.getReadableDatabase();  
Cursor c = db.rawQuery(selectQuery, null); 
Date d=null; 
    if(c.moveToFirst()){ 
     try { 
      d= fm.parse(c.getString(c.getColumnIndex("DD"))); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    return d; 
    }else 
    { 
    return null; 
    } 
} 

Если я распечатать SQL строку и запустить его SQLite Manager (Fire Fox), он возвращает данные я хочу.

Попытка использовать его код, я получаю нулевой указатель ERR исключение, как показано ниже

12-29 04:30:14.923: W/System.err(2017): java.lang.NullPointerException 
12-29 04:30:14.923: W/System.err(2017):  at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1009) 
12-29 04:30:14.923: W/System.err(2017):  at java.text.DateFormat.parse(DateFormat.java:553) 
12-29 04:30:14.943: W/System.err(2017):  at meter.manager.helper.DatabaseHelperClass.getLastPaidInvoiceDate(DatabaseHelperClass.java:2726) 
12-29 04:30:14.943: W/System.err(2017):  at com.example.metermanager.SetInActiveTenant.UpDate(SetInActiveTenant.java:79) 
12-29 04:30:14.943: W/System.err(2017):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-29 04:30:14.943: W/System.err(2017):  at java.lang.reflect.Method.invoke(Method.java:515) 
12-29 04:30:14.943: W/System.err(2017):  at android.view.View$1.onClick(View.java:3818) 
12-29 04:30:14.943: W/System.err(2017):  at android.view.View.performClick(View.java:4438) 
12-29 04:30:14.943: W/System.err(2017):  at android.view.View$PerformClick.run(View.java:18422) 
12-29 04:30:14.943: W/System.err(2017):  at android.os.Handler.handleCallback(Handler.java:733) 
12-29 04:30:14.943: W/System.err(2017):  at android.os.Handler.dispatchMessage(Handler.java:95) 
12-29 04:30:14.943: W/System.err(2017):  at android.os.Looper.loop(Looper.java:136) 
12-29 04:30:14.943: W/System.err(2017):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
12-29 04:30:14.943: W/System.err(2017):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-29 04:30:14.943: W/System.err(2017):  at java.lang.reflect.Method.invoke(Method.java:515) 
12-29 04:30:14.943: W/System.err(2017):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
12-29 04:30:14.943: W/System.err(2017):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
12-29 04:30:14.943: W/System.err(2017):  at dalvik.system.NativeStart.main(Native Method) 

Это, как я использую в коде

Дата d = db.getLastPaidInvoiceDate (ID);

По какой причине?

+0

сначала проверьте, работает ли ваш запрос в sqlite db или нет – LMK

ответ

0

Совокупные функции, такие как MAX(), возвращают NULL в случае, если они объединяют набор из 0 строк - выбор не соответствует ни одному.

Вы можете проверить нулевое значение, например. с CursorisNull() перед попыткой проанализировать значение.

+0

Здравствуйте ... мой курсор имеет один столбец. Я уверен, что C.MoveToFirst может это проверить? – user3079559

+0

Это решает проблему с нулевым указателем ... хотя мой код теперь выглядит ошибочным .. это не делает то, что я хочу. Всегда возвращаю nulls, даже если у меня есть данные. – user3079559

+0

@ user3079559, я думаю, что ваш запрос может быть неправильным. –