2015-02-25 4 views
0

Если вы посмотрите на мой код внизу, у меня есть база данных со столбцом «used». Если это 1, это означает, что он не использовался, когда он используется, он устанавливает обновление числа до 0. Но когда все строки используют число 0, я хотел бы обновить значение, используемое от 0 до 1 снова. Как это сделать? Без понятия. Пробовал cd.getCount(), но не работал, попробовал и другие вещи, но снова не смог заставить его работать. Поэтому я спрашиваю, может ли кто-нибудь помочь мне и рассказать мне, что вводить в код. Спасибо!Как обновить базу данных, когда она пуста? Android

Это ошибка я получаю:

02-25 18: 46: 16,962: E/AndroidRuntime (9728): android.database.CursorIndexOutOfBoundsException: Индекс 0 просил, с размером 0

public void set(){ 
    SQLiteDatabase db; 
    String vprasanje = ""; 
    db=openOrCreateDatabase("baza.db",MODE_PRIVATE, null); 

    Cursor cd=db.rawQuery("SELECT * FROM vprasanja WHERE kategorija=" + kategorija4 + " AND used = 1 ORDER BY RANDOM() LIMIT 1", null); 
    cd.moveToFirst(); 

     vprasanje = cd.getString(cd.getColumnIndex("text")); 

     //patch 
     String id2 = (cd.getString(cd.getColumnIndex("id"))); 
     int idd2 = Integer.parseInt(id2); 
     db.execSQL("UPDATE vprasanja SET used=0 WHERE id =" + idd2 + ";"); 


     beseda = (TextView) findViewById(R.id.textView3); 
     beseda.setText(""); 
     beseda.setText(vprasanje); 

     db.close(); 
     busy = 0; 
} 

ответ

4

Итак, есть несколько вещей в вашем коде, которые должны быть исправлены. Во-первых, вам нужно проверить, действительно ли курсор.moveToFirst(). Вы не можете попытаться получить строки, если в базе данных нет записей.

Первое тогда:

if(cd.moveToFirst()){ 

     vprasanje = cd.getString(cd.getColumnIndex("text")); 

     //patch 
     String id2 = (cd.getString(cd.getColumnIndex("id"))); 
     int idd2 = Integer.parseInt(id2); 
     db.execSQL("UPDATE vprasanja SET used=0 WHERE id =" + idd2 + ";"); 


     beseda = (TextView) findViewById(R.id.textView3); 
     beseda.setText(""); 
     beseda.setText(vprasanje); 


     db.close(); 
     busy = 0; 
} 

Однако, до тех пор, как вы не вставить материал в базу данных, это всегда будет ложным, потому что никогда не будет каких-либо записей в базе данных. Вы хотите, чтобы вставить материал в случае, если вы не можете обновить его:

db.rawQuery("INSERT INTO .... SET ... VALUES ..."); 
+0

Также хорошо убедитесь, что курсор не равно нулю: (! Кд = NULL && cd.moveToFirst()) ', если' { –

+0

Могу ли я написать что-то вроде этого для обновления? db.execSQL ("UPDATE vprasanja SET used = 1 WHERE kategorija =" + kategorija4); @jvrodrigues – Everlastinf

+0

Обновление работает только в том случае, если есть какая-то запись. Если нет, вам нужно вставить его. – jvrodrigues

Смежные вопросы