web-dev-qa-db-ja.com

AndroidでSQLiteからすべてのアイテムを削除する方法

ユーザーがボタンをクリックすると、SQLiteデータベースがクリアされるアプリを作成したいと思います。これまでに試したことは次のとおりです。

db.delete(TABLE_NAME, null, null);

私は何を間違えていますか?

21
Cg2916

Delete()呼び出しは正しいです。書き込み可能なデータベースを取得しましたか? deleteを使用する方法の例を次に示します。

/**
 * Remove all users and groups from database.
 */
public void removeAll()
{
    // db.delete(String tableName, String whereClause, String[] whereArgs);
    // If whereClause is null, it will delete all rows.
    SQLiteDatabase db = helper.getWritableDatabase(); // helper is object extends SQLiteOpenHelper
    db.delete(DatabaseHelper.TAB_USERS, null, null);
    db.delete(DatabaseHelper.TAB_USERS_GROUP, null, null);
}
44
petrnohejl

db.delete(TABLE_NAME、null、null);テーブル内のすべての行を削除する正しい構文です。しかし、テーブル名を二重引用符で囲まずに直接指定したと思います。こうやって

db.delete("TABLE_NAME", null, null);

それが役立つかもしれません:)

16
suraj

実際には、テーブルをDROPしてから、onCreateに対してSQLiteDatabaseメソッドを呼び出すだけでした。各メソッドがどれほど効率的であるかを深く掘り下げていないので、最も効率的なDeleteまたはDropがどれなのかわかりませんが、最初のデータベースではいくつかのデフォルト値が設定されているため、データベースのonCreateメソッドを呼び出すと、いくつかのPUTメソッドもあります。これにより、コードの複製が節約されます。 (削除してからputする代わりに、onCreate関数から多目的を取得します)。

resetと呼びます。したがって、db.reset()を実行するだけで、テーブルを作成した後、onCreateにデフォルト値が追加されます。

public void reset () throws SQLException {
    db = DBHelper.getWritableDatabase ();
    db.execSQL ("drop table "+TABLE_NAME);
    db.close ();
    this.DBHelper.onCreate (this.db);
}
3
SQLiteDatabase db = this.getWritableDatabase(); //get database
        db.execSQL("DELETE FROM tablename"); //delete all rows in a table
db.close();
2

このコードを使用してください:

public void deleteAll()
{
    SQLiteDatabase db = this.getWritableDatabase();
    db.execSQL("delete from "+ TABLE_NAME);
    db.close();
}

databaseHandlerクラスを追加できます。これは完全なソースコードです。

public class DatabaseHandler extends SQLiteOpenHelper {

// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
public static final String DATABASE_NAME = "OffLineMessagesClient";

// Contacts table name
public static final String TABLE_NAME = "messages_client";

// Contacts Table Columns names
private static final String KEY_ENTITY_ID = "entity_id";
private static final String KEY_MESSAGE = "message";

public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_NAME + "("
            + KEY_ENTITY_ID + " INTEGER,"
            + KEY_MESSAGE + " TEXT"
            +  ")";

    db.execSQL(CREATE_CONTACTS_TABLE);
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
                      int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);

    // Create tables again
    onCreate(db);
}

public void deleteAll()
{
    SQLiteDatabase db = this.getWritableDatabase();
    db.execSQL("delete from "+ TABLE_NAME);
    db.close();
}
}

私にとって古典的なmysqlステートメント:

SQLiteDatabase sqLiteDatabase = context.openOrCreateDatabase(Database.DATABASE_NAME, Context.MODE_PRIVATE, null, null);
sqLiteDatabase.execSQL("DELETE FROM " + tableName1);
sqLiteDatabase.execSQL("DELETE FROM " + tableName2);
sqLiteDatabase.execSQL("DELETE FROM " + tableName3);
sqLiteDatabase.execSQL("DELETE FROM " + tableName4);

完璧に働きました。幸運を :)
ps .: start/endtransactionまたはcloseDatabaseなし…

0
cV2

私のためのこの仕事:

 public void removeAll()
{

    SQLiteDatabase db = this.getWritableDatabase(); 
    db.delete(TABLE_NAME, null, null);
    db.close();



}
0
Mersad Nilchy

デバイスで開発するときに試すことができる1つのこと:

設定>>アプリケーション>>(アプリケーション名)>>ストレージ>>キャッシュのクリアとデータのクリア

アプリケーションデータとアプリケーションキャッシュをクリアすると、SQLデータベースも消去されます。

0
Sm0k3Scr33n