android数据库:如何正确地从数据库中提取数据?

android数据库:如何正确地从数据库中提取数据?,android,database,sqlite,Android,Database,Sqlite,我正在数据库中保存和提取数据,关键是从日历中选择的日期 这是一种记录每天体重数据的方法。如果我在A天输入了所需的数据,然后继续提取A天的数据,一切都很好 我的问题: 如果我没有为A天输入任何内容,直接继续提取A天的数据,它将崩溃。如果数据库中没有记录,我如何修改代码,以便用户可以安全地得到祝酒词,说“用户没有输入当天的记录,没有找到记录” 代码: 做 这样,如果光标是空的,那么它将跳过同样值得检查的光标不为空。例如,if(result!=null&&result.moveToFirst()){…

我正在数据库中保存和提取数据,关键是从日历中选择的日期

这是一种记录每天体重数据的方法。如果我在A天输入了所需的数据,然后继续提取A天的数据,一切都很好

我的问题: 如果我没有为A天输入任何内容,直接继续提取A天的数据,它将崩溃。如果数据库中没有记录,我如何修改代码,以便用户可以安全地得到祝酒词,说“用户没有输入当天的记录,没有找到记录”

代码: 做


这样,如果光标是空的,那么它将跳过同样值得检查的
光标
不为空。例如,
if(result!=null&&result.moveToFirst()){…}
@Squonk cursor永远不应该null@tyczj:OP正在调用其
DataBaseHelper
类的实例上的方法。如果(出于某种原因)查询失败且
光标
尚未初始化,则返回的
光标
完全可能实际为空。如果看不到帮助器的代码,就不可能判断
光标
是否为空。
protected void onResume()
{
    super.onResume();   
    try
    {
         new LoadDataTask().execute(record_day_int);
    }
    catch (SQLiteException e)
    {
        System.err.println("Exception Message: " + e.getMessage());
    }
}

   private class LoadDataTask extends AsyncTask<Long, Object, Cursor> 
   {
       DataBaseHelper databaseConnector = new DataBaseHelper(Calendar_view.this);

      @Override
      protected Cursor doInBackground(Long... params)
      {
         databaseConnector.open();
         return databaseConnector.getOneRecord(params[0]);
      } 

      @Override
      protected void onPostExecute(Cursor result)
      {
         super.onPostExecute(result);

         result.moveToFirst();

         int weight_kg01Index = result.getColumnIndex("weight_kg01");
             weight_data.setText(""+result.getInt(weight_kg01Index));

         result.close();
         databaseConnector.close();
      }
   } 
08-28 01:06:16.790: W/dalvikvm(19928): threadid=1: thread exiting with uncaught exception (group=0x412282a0)
08-28 01:06:16.790: E/AndroidRuntime(19928): FATAL EXCEPTION: main
08-28 01:06:16.790: E/AndroidRuntime(19928): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
08-28 01:06:16.790: E/AndroidRuntime(19928):    at android.database.AbstractCursor.checkPosition(AbstractCursor.java:418)
08-28 01:06:16.790: E/AndroidRuntime(19928):    at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
08-28 01:06:16.790: E/AndroidRuntime(19928):    at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:68)
08-28 01:06:16.790: E/AndroidRuntime(19928):    at com.abc.abc.Calendar_view$LoadContactTask.onPostExecute(Calendar_view.java:233)
08-28 01:06:16.790: E/AndroidRuntime(19928):    at com.abc.abc.Calendar_view$LoadContactTask.onPostExecute(Calendar_view.java:1)
08-28 01:06:16.790: E/AndroidRuntime(19928):    at android.os.AsyncTask.finish(AsyncTask.java:631)
08-28 01:06:16.790: E/AndroidRuntime(19928):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
08-28 01:06:16.790: E/AndroidRuntime(19928):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
08-28 01:06:16.790: E/AndroidRuntime(19928):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-28 01:06:16.790: E/AndroidRuntime(19928):    at android.os.Looper.loop(Looper.java:137)
08-28 01:06:16.790: E/AndroidRuntime(19928):    at android.app.ActivityThread.main(ActivityThread.java:4898)
08-28 01:06:16.790: E/AndroidRuntime(19928):    at java.lang.reflect.Method.invokeNative(Native Method)
08-28 01:06:16.790: E/AndroidRuntime(19928):    at java.lang.reflect.Method.invoke(Method.java:511)
08-28 01:06:16.790: E/AndroidRuntime(19928):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
08-28 01:06:16.790: E/AndroidRuntime(19928):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
08-28 01:06:16.790: E/AndroidRuntime(19928):    at dalvik.system.NativeStart.main(Native Method)
if(result.moveToFirst()){
    int weight_kg01Index = result.getColumnIndex("weight_kg01");
         weight_data.setText(""+result.getInt(weight_kg01Index));
}
result.close();