2012-04-03 3 views
1

ВопросУдаление из Android SQLite Database


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

public void delete(View view) 
{ 
    datasource.open(); 
    datasource.deleteTitle(0); 
    datasource.close(); 
} 

удаления метод его это метод здесь: -

public boolean deleteTitle(long rowId) 
{ 
    return db.delete(DATABASE_TABLE, KEY_ROWID + 
      "=" + rowId, null) > 0; 
} 

Есть ли другой способ, которым я должен это делать?

Кнопка устанавливается следующим образом: -

<Button 
     android:id="@+id/delete" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Delete First" 
     android:onClick="delete"/> 

Я использую встроенный в onClick, чтобы перейти к методу я хочу. Я использую это в других частях приложения, и он работает отлично.

Решение:


Из принятого ответа, я взял код, который и создал вызов имен классов DatabaseHelper удалить первый. Код я использовал: -

public void deleteFirst() 
{ 
    Cursor cursor = db.query(DATABASE_TABLE, null, null, null, null, null, null); 

    if(cursor.moveToFirst()) { 
     long rowId = cursor.getLong(cursor.getColumnIndex(KEY_ROWID)); 

     db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null); 
    } 
} 

, а затем я изменил код, который я дал выше:

public void delete(View view) 
{ 
    datasource.open(); 
    datasource.deleteFirst(); 
    fillData(); 
    datasource.close(); 
} 

с fillData() методом освежающий вид.

+0

что ошибка LogCat или это ошибка выполнения? – jmishra

+0

нет ошибки, просто ничего не делая. кнопка onClick для удаления - это то, что я дал выше. но когда я нажимаю на него, ни одно из операторов, похоже, не выполняет –

+0

, вы подключили кнопку с помощью 'findViewById (R.id.buttonId)'? – jmishra

ответ

2

Первая запись в базе данных не всегда будет иметь идентификатор «0». Каждый раз, когда вы вставляете новую запись, первичный ключ увеличивается на 1. Таким образом, вам нужно получить идентификатор первой записи и выполнить удаление с использованием этого идентификатора.

Cursor cursor = db.query(DATABASE_TABLE, null, null, null, null, null, null); 

    if(cursor.moveToFirst()) { 
     long rowId = cursor.getLong(cursor.getColumnIndex(KEY_ROWID)); 

     db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null); 
    } 
+0

Право имеет смысл. Я думал, что чего-то не хватает. где я должен поставить эти статуты? –

+0

как раз перед db.delete в вашем коде, я думаю. Я действительно не могу сказать, так как я понятия не имею, как вы внедрили свою базу данных.Но это идея, сначала выполнить запрос, чтобы получить первую запись в базе данных и получить ее идентификатор, а затем удалить ее с помощью этого идентификатора. –

+0

что я сделал, я использовал ваш код как свой собственный вызов базы данных с именем «deleteFirst», так что у меня есть специальный код, который удалит первое значение базы данных. Должен ли я редактировать свое сообщение, чтобы показать, как я его настроил сейчас? –

0

остановка worrieng о SQL и использовать greenDAO :) очень просто, очень легко и легкий каркас sqllite для андроида

http://greendao-orm.com/

+0

не уверен, что могу изменить это до разработки приложения. его мой последний проект, и я заявил, что буду использовать SQLite как часть баз для проекта, поэтому его изменение изменит то, что я собираюсь сделать. хотя я буду смотреть на него и посмотреть, облегчит ли он ситуацию. если он может быть реализован даже на этом позднем этапе, я отключу его –