title: Error - android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
body: <p>I'm triying to do a database, but i have a problem...</p>
  
  <p>This is the log:  </p>
  
  <pre><code>E/AndroidRuntime(894): FATAL EXCEPTION: main
  E/AndroidRuntime(894): java.lang.IllegalStateException: Could not execute method of the activity
  E/AndroidRuntime(894):  at android.view.View$1.onClick(View.java:3044)
  E/AndroidRuntime(894):  at android.view.View.performClick(View.java:3511)
  E/AndroidRuntime(894):  at android.view.View$PerformClick.run(View.java:14105)
  E/AndroidRuntime(894):  at android.os.Handler.handleCallback(Handler.java:605)
  E/AndroidRuntime(894):  at android.os.Handler.dispatchMessage(Handler.java:92)
  E/AndroidRuntime(894):  at android.os.Looper.loop(Looper.java:137)
  E/AndroidRuntime(894):  at android.app.ActivityThread.main(ActivityThread.java:4424)
  E/AndroidRuntime(894):  at java.lang.reflect.Method.invokeNative(Native Method)
  E/AndroidRuntime(894):  at java.lang.reflect.Method.invoke(Method.java:511)
  E/AndroidRuntime(894):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
  E/AndroidRuntime(894):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
  E/AndroidRuntime(894):  at dalvik.system.NativeStart.main(Native Method)
  E/AndroidRuntime(894): Caused by: java.lang.reflect.InvocationTargetException
  E/AndroidRuntime(894):  at java.lang.reflect.Method.invokeNative(Native Method)
  E/AndroidRuntime(894):  at java.lang.reflect.Method.invoke(Method.java:511)
  E/AndroidRuntime(894):  at android.view.View$1.onClick(View.java:3039)
  E/AndroidRuntime(894):  ... 11 more
  E/AndroidRuntime(894): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
  E/AndroidRuntime(894):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:400)
  E/AndroidRuntime(894):  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
  E/AndroidRuntime(894):  at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:74)
  E/AndroidRuntime(894):  at and.mGroup.VirtualTrener.DatabaseControl.fetchItemByType(DatabaseControl.java:59)
  E/AndroidRuntime(894):  at and.mGroup.VirtualTrener.DatabaseManageActivity.onClick(DatabaseManageActivity.java:48)
  E/AndroidRuntime(894):  ... 14 more
  </code></pre>
  
  <p>Here is DatabaseControl.java:</p>
  
  <pre><code>public class DatabaseControl {
  
      private static final String KEY_ROWID = "_id";
      private static final String KEY_NAME = "NAME";
      private static final String KEY_BKI = "BKI";
      private static final String KEY_CKM = "CKM";
  
      private static final String DATABASE_TABLE ="inventory";
  
      private Context context;
      private SQLiteDatabase database;
      private DatabaseHelper dbHelper;
  
      public DatabaseControl(Context context){
          this.context = context;
      }
  
      public DatabaseControl open() throws SQLiteException {
          dbHelper = new DatabaseHelper(context);
          database = dbHelper.getWritableDatabase();
          return this;
      }
  
      public void close () {
          dbHelper.close();
      }
  
      public long addItem(String NAME, int BKI, int CKM) {
          ContentValues setUpVals = CreateContentValues(NAME,BKI,CKM);
          return database.insert(DATABASE_TABLE, null, setUpVals);
  
      }
  
  
  
      public boolean updateItem (long id, String NAME, int BKI, int CKM){
          ContentValues updateVals = CreateContentValues(NAME,BKI,CKM);
  
          return database.update(DATABASE_TABLE, updateVals, KEY_ROWID + "="+ id, null) &gt; 0;
      }
  
  
      public long fetchItemByType(String type){
          Cursor dbCursor;
  
          long id =0;
          try {
              dbCursor = database.query(true, DATABASE_TABLE, new String[]{KEY_ROWID},KEY_NAME + "= '" + type + "'" , null, null, null, null, null);
              dbCursor.moveToFirst();
              id = dbCursor.getLong(dbCursor.getColumnIndex(KEY_ROWID));
          } catch (SQLiteException e) {
              id = -1;
          }
          return id;      
      }
  
      public String fetchAllItems(){
          String allData = "";
  
          Cursor dbCursor;
          try {
              dbCursor = database.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME, KEY_BKI, KEY_CKM}, null, null, null, null, null);
              //dbCursor.getCount();
              int iRow = dbCursor.getColumnIndex(KEY_ROWID);
              int iName = dbCursor.getColumnIndex(KEY_NAME);
              int iBKI = dbCursor.getColumnIndex(KEY_BKI);
              int iCKM = dbCursor.getColumnIndex(KEY_CKM);
  
              for (dbCursor.moveToFirst(); !dbCursor.isAfterLast(); dbCursor.moveToNext())
              {
                  allData = allData + " " + dbCursor.getString(iRow) + "\t" + dbCursor.getString (iName) + "\t" + dbCursor.getString (iBKI) + "\t" + dbCursor.getString (iCKM) + "\n";
              }
          } catch (Exception e) {
              // TODO Auto-generated catch block
              allData = "";
  
          }
          return allData;
      }
  
      public boolean deleteItem(long id){
          return database.delete(DATABASE_TABLE, KEY_ROWID + "=" + id, null) &gt; 0;
      }
  
      private ContentValues CreateContentValues(String nAME, int bKI, int cKM) {
          // TODO Auto-generated method stub
          ContentValues values = new ContentValues();
          values.put(KEY_NAME, nAME);
          values.put(KEY_BKI, bKI);
          values.put(KEY_CKM, cKM);
          return values;
      }
  }
  </code></pre>
  
  <p>Here is DatabaseHelper.java:</p>
  
  <pre><code>public class DatabaseHelper extends SQLiteOpenHelper {
  
      private static final String DATABASE_NAME = "ItemInventorydb";
      private static final int DATABASE_VERSION = 1;
  
  
      private static final String DATABASE_CREATE = "CREATE TABLE inventory (" +
      "_id integer PRIMARY KEY AUTOINCREMENT," +
              "NAME text," +
              "BKI integer," +
              "CKM integer" +
              ");";
  
  
      public DatabaseHelper (Context context){
          super(context, DATABASE_NAME,null,DATABASE_VERSION);
  
      }
  
  
      @Override
      public void onCreate(SQLiteDatabase db) {
          db.execSQL(DATABASE_CREATE);
  
      }
  
  
      @Override
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
          db.execSQL("DROP TABLE IF EXIST inventory");
          onCreate(db);
  
      }
  }
  </code></pre>
  
  <p>Here is DatabaseManageActivity.java:</p>
  
  <pre><code>public class DatabaseManageActivity extends Activity {
  
      private EditText nazwaInput;
      private EditText bkiInput;
      private EditText ckmInput;
      private DatabaseControl dbControl;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          // TODO Auto-generated method stub
          super.onCreate(savedInstanceState);
          setContentView(R.layout.wejscie_sesje);
          dbControl = new DatabaseControl(this);
          nazwaInput = (EditText) findViewById(R.id.name);
      }
  
      public void onClick(View arg){
          String nazwaData = nazwaInput.getText().toString().toLowerCase();
          //String bkiData = bkiInput.getText().toString();
          //String ckmData = ckmInput.getText().toString();
          Dialog notice = new Dialog(this);
          TextView msgBody = new TextView(this);
          msgBody.setTextSize(20);
          long tempVal =0;
  
  
          switch (arg.getId()){
          case R.id.addItem:
  
              try {
                  //int bkiDataAsNum =Integer.parseInt(bkiData);
                  //int ckmDataAsNum =Integer.parseInt(ckmData);
                  int bkiDataAsNum = 3500;
                  int ckmDataAsNum = 24;
                  dbControl.open();
  
                  if ((tempVal = dbControl.fetchItemByType(nazwaData)) != -1){
                      if(dbControl.updateItem(tempVal, nazwaData, bkiDataAsNum, ckmDataAsNum)){
                          notice.setTitle("Zaktualizowano!");
                          msgBody.setText("Item, który istniał zostal zaktualizowany");
                      }
                      else {
                          notice.setTitle("Aktualizacja zakończona niepowodzeniem");
                          msgBody.setText("Item, ktory istniał nie został zaktualizowany");
                      }
                  }
                  else {
                      long rowId =0;
                      rowId = dbControl.addItem(nazwaData, bkiDataAsNum, ckmDataAsNum);
                      notice.setTitle("Item umieszczony!");
                      msgBody.setText("Item umieszczony na pozycji" + rowId);
                  }
                  dbControl.close();
              }
              catch (SQLiteException e) {
                  e.printStackTrace();
                  notice.setTitle("Umieszczenie zakończone niepowodzeniem !");
                  msgBody.setText("Błąd SQL");
              }
              catch (NumberFormatException e) {
                  e.printStackTrace();
                  notice.setTitle("Umieszczenie zakończone niepowodzeniem!");
                  msgBody.setText("Wartość musi być wartością numeryczną!");
          }
          notice.setContentView(msgBody);
          notice.show();
          break;
  
          case R.id.updateItem:
  
  
              try{
                  //int bkiDataAsNum =Integer.parseInt(bkiData);
                  int bkiDataAsNum = 3500;
                  int ckmDataAsNum = 24;
                  //int ckmDataAsNum =Integer.parseInt(ckmData);
  
                  dbControl.open();
  
                  if ((tempVal = dbControl.fetchItemByType(nazwaData)) != -1){
                      if(dbControl.updateItem(tempVal, nazwaData, bkiDataAsNum, ckmDataAsNum)){
                          notice.setTitle("Zaktualizowano!");
                          msgBody.setText("Item, zostal zaktualizowany");
                      }
                      else {
                          notice.setTitle("Aktualizacja zakończona niepowodzeniem");
                          msgBody.setText("Aktualizacja zakończona niepowodzeniem, nie znaleziono rekordów");
                      }
                  }
                  else
                  {
                      notice.setTitle("Aktualizacja zakończona niepowodzeniem");
                      msgBody.setText("Item nie został znaleziony!");
                  }
                  dbControl.close();
  
  
      }
              catch (SQLiteException e) {
                  e.printStackTrace();
                  notice.setTitle("Update zokończony niepowodzeniem!");
                  msgBody.setText("Błąd SQL");
              }
              catch (NumberFormatException e) {
                  e.printStackTrace();
                  notice.setTitle("Update zokończony niepowodzeniem!");
                  msgBody.setText("Wartość musi być wartością numeryczną!");
          }
          notice.setContentView(msgBody);
          notice.show();
          break;
  
          case R.id.deleteItem:
  
              try{
  
                  dbControl.open();
  
                  if ((tempVal = dbControl.fetchItemByType(nazwaData)) != -1){
                      if(dbControl.deleteItem(tempVal)){
                          notice.setTitle("Usunięto!");
                          msgBody.setText("Item, zostal usunięty");
                      }
                      else {
                          notice.setTitle("Usunięcie zakończone niepowodzeniem");
                          msgBody.setText("Usunięcie zakończone niepowodzeniem, nie znaleziono rekordów");
                      }
                  }
                  else
                  {
                      notice.setTitle("Usunięcie zakończone niepowodzeniem");
                      msgBody.setText("Item nie został znaleziony!");
                  }
                  dbControl.close();
  
  
      }
              catch (SQLiteException e) {
                  e.printStackTrace();
                  notice.setTitle("Usunięcie zakończone niepowodzeniem!");
                  msgBody.setText("Błąd SQL");
              }
  
          notice.setContentView(msgBody);
          notice.show();
          break;
  
          case R.id.viewData:
              Intent i = new Intent("android.intent.action.DatabaseViewer");
              startActivity(i);
              break;
              default:
  }
      }}
  </code></pre>
  
  <p>and DatabaseViewer.java:</p>
  
  <pre><code>public class DatabaseViewer extends Activity {
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          // TODO Auto-generated method stub
          super.onCreate(savedInstanceState);
          setContentView(R.layout.dataview);
          TextView content = (TextView) findViewById(R.id.dataOutput);
          DatabaseControl control = new DatabaseControl(this);
          String result = "_id\t NAME\t BKI\t CKM \n ";
  
          try {
              control.open();
              result = result + ""+ control.fetchAllItems();
              control.close();
          }
          catch (SQLiteException e) {
              e.printStackTrace();
          }
          content.setText(result);
      }
  
  }
  </code></pre>
  
  <p>I have not idea what is wrong... Could You help me? It will be nice , when if You will answering, You will using simple to understand language.</p>