2010-06-22 24 views
9

Próbuję napisać funkcję, która usunie każdy wiersz w tabeli, ale otrzymuję wyjątek wskaźnika pustego. Czy ktoś może wskazać mi właściwy kierunek? Oto kod ...Usunąć wszystkie wiersze z tabeli, rzuca nullpointer

public void deleteall(){ 
    SQLiteDatabase db = tweets.getWritableDatabase(); 
    String delete = "TRUNCATE FROM tweets"; 
    db.rawQuery(delete, null); 

     } 

Odpowiedz

57

Sprawdź, czy tweets jest null.

Wydaje mi się, że korzystanie z tego połączenia jest o wiele prostsze niż korzystanie z usługi rawQuery. Twój rawquery musi zostać przeanalizowany, ale używając metody delete, używa już sparametryzowanego zapytania.

db.delete('tweets',null,null); 
+2

Wciąż dostaję NullPointer używam metody zliczania mi pomógł w innym pytaniu, aby sprawdzić, czy wiersze> 1, jeśli jest to wtedy jestem wykonywania tej metody. Ale nadal dostaję zerowy wskaźnik, zakładam, że idę o tym w niewłaściwy sposób ... czy jest lepszy sposób na sprawdzenie zerowego stołu? – Skizit

+0

Sprawdź 'adb logcat' lub' ddms', aby zobaczyć, co powoduje wskaźnik zerowy. Myślę, że masz tam coś więcej. http://www.brighthub.com/mobile/google-android/articles/25023.aspx – Pentium10

0

SQLite nie ma żadnego TRUNCATE oświadczenie, więc trzeba zrobić:

public void deleteall(){ 
    SQLiteDatabase db = tweets.getWritableDatabase(); 
    String delete = "DELETE FROM tweets"; 
    db.rawQuery(delete, null); 
} 
+0

aby usunąć wszystkie wiersze, możesz użyć następującej metody. nieważne deleteAll() \t { \t \t SQLiteDatabase dB = this.getWritableDatabase(); \t \t db.delete (table_name, null, null); \t \t} –

11

prostu usunąć wszystkie wiersze, można użyć następujących metod.

void deleteAll() 
{ 
    SQLiteDatabase db= this.getWritableDatabase(); 
    db.delete(table_name, null, null); 

} 
1
dataBaseHelper = new DataBaseHelper(getApplicationContext(), DataBaseHelper.DataBaseName, null, 1); 
    sqLiteDatabase = dataBaseHelper.getWritableDatabase(); 
    if (sqLiteDatabase != null) { 
     sqLiteDatabase.delete(DataBaseHelper.TableName, null, null); 
     Toast.makeText(MainActivity.this, "Refresh", Toast.LENGTH_SHORT).show(); 
    } else 
     Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show(); 
    break; 
} 
+1

Proszę wyjaśnić swój kod. – hims056

1

byłem coraz wyjątku null pointer, a potem zdałem sobie sprawę, że moja metoda nie dzwoni db.open() pierwszy. Dodano (i db.close()) i zadziałało.

0

Ustawienie drugiego parametru na null powoduje usunięcie wszystkich wierszy.

public int deleteAllRowsInTable() { 

    SQLiteDatabase db = helper.getWritableDatabase(); // helper = MyDatabaseHelper 
    String whereClause = null; // delete all rows 
    String[] whereArgs = { null }; 
    int count = db.delete(MyDatabaseHelper.TABLE_NAME, whereClause, whereArgs); 
    db.close(); // don't forget to close the database 
    return count; // number of rows affected 
} 

Powyższy kod służy ilustracji. Może to być po prostu uproszczone do

public int deleteAllRowsInTable() { 

    SQLiteDatabase db = helper.getWritableDatabase(); 
    int count = db.delete(MyDatabaseHelper.TABLE_NAME, null, null); 
    db.close(); 
    return count; 
} 
0

Prawidłowa odpowiedź to:

db.delete('tweets',"1",null); 

z Android oficjalnej dokumentacji: SQLiteDatabase

Powiązane problemy