2016-08-12 12 views
0

ユーザーがボタンをクリックしたときにデータベースからすべてのデータを消去しようとしています。私はデータベース全体を削除しないでそれを行う方法がわかりません。sqlite dbからデータを消去

(彼らはまだ後でアプリでそれに項目を追加することができますので、私は、列および表を作成したままにしておきたい)

public class MyProgress extends BaseActivity{ 
    Button btnClear; 
    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.my_progress); 
     mToolBar = activateToolbar(); 
     setUpNavigationDrawer(); 
     getSupportActionBar().setTitle("My Progress"); 
     btnClear.findViewById(R.id.btnClear); 

     RecordsDatabase helper = new RecordsDatabase(this); 
     Cursor c = helper.getRecords(); 
     ListView listViewRec = (ListView) findViewById(R.id.listViewRecord); 
     final TodoCursorAdapter adapter = new TodoCursorAdapter(this, c); 
     listViewRec.setAdapter(adapter); 


     btnClear.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //NEED TO CLEAR DB HERE 
       adapter.notifyDataSetChanged(); 
      } 
     }); 
    } 
} 

マイrecordsDatabase:

public class RecordsDatabase extends SQLiteOpenHelper { 

    public static final int DATABASE_VERSION = 1; 

    public RecordsDatabase(Context context) { 
     super(context, RecordContract.RecordInfo.DATABASE_NAME, null, DATABASE_VERSION); 
     Log.d("Database operations", "Database created"); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE " + RecordContract.RecordInfo.TABLE_NAME + " (" 
       + BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," 
         + RecordContract.RecordInfo.RECORDS_DATE + " TEXT NOT NULL," 
       + RecordContract.RecordInfo.RECORDS_SQUAT + " TEXT NOT NULL," 
       + RecordContract.RecordInfo.RECORDS_BENCH + " TEXT NOT NULL," 
       + RecordContract.RecordInfo.RECORDS_DEAD + " TEXT NOT NULL," 
       + RecordContract.RecordInfo.RECORDS_TOTAL + " TEXT NOT NULL)" 

     ); 
     Log.d("Database operations", "Table created"); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    } 

    public void putInformation(String date, String squat, String bench, String dead, String total) { 
     SQLiteDatabase SQ = getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 

     contentValues.put(RecordContract.RecordInfo.RECORDS_DATE, date); 
     contentValues.put(RecordContract.RecordInfo.RECORDS_SQUAT, squat); 
     contentValues.put(RecordContract.RecordInfo.RECORDS_BENCH, bench); 
     contentValues.put(RecordContract.RecordInfo.RECORDS_DEAD, dead); 
     contentValues.put(RecordContract.RecordInfo.RECORDS_TOTAL, total); 
     long k = SQ.insert(RecordContract.RecordInfo.TABLE_NAME, null, contentValues); 
     Log.d("Database operations", "Record added(1 row)"); 

    } 

    public Cursor getRecords() { 
     SQLiteDatabase SQ = getReadableDatabase(); 
     String[] columns = {RecordContract.RecordInfo._ID, RecordContract.RecordInfo.RECORDS_DATE, RecordContract.RecordInfo.RECORDS_SQUAT, RecordContract.RecordInfo.RECORDS_BENCH 
     , RecordContract.RecordInfo.RECORDS_DEAD, RecordContract.RecordInfo.RECORDS_TOTAL}; 
     Cursor CR = SQ.query(RecordContract.RecordInfo.TABLE_NAME, columns,null, null, null, null, null); 
     return CR; 

    } 
} 

私は追加することを考えていましたRecordsDatabase.javaにclearInfo()がありますが、どうすればよいかわかりません。

+0

'DROP TABLE' ...' CREATE TABLE' –

+1

[アンドロイドのsqliteからテーブルをクリアできません](http://stackoverflow.com/questions/11951698/can-not-clear-table-from) -sqlite-in-android) –

+0

残念ながら、残念ながら、私が画面を離れて戻り、adapter.notifyDataSetChanged()であっても、リストビューは更新されません。 – LBJ33

答えて

1

ドロップテーブルと次にテーブル作成テーブルからデータを削除しようとすると高速になります。

データベース全体を削除し、削除全体を実行する場合は、データベースを再作成することもできます。このsould作品のような

+0

残念ながら、残念ながら、私が画面を離れて戻り、adapter.notifyDataSetChanged()であってもlistviewは更新されません。 – LBJ33

+0

データセットで新しいアダプタを設定してみてください。 –

1

何か:もちろん

btnClear.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

    sqLiteDatabase = dbHelper.getWritableDatabase(); 
    sqLiteDatabase.delete(RecordContract.RecordInfo.TABLE_NAME, null, null); 
    sqLiteDatabase.execSQL("delete from " + RecordContract.RecordInfo.TABLE_NAME); 
    sqLiteDatabase.close(); 

    adapter.notifyDataSetChanged(); 
    } 
}); 

、あなたはあなたの目的のためにコードを適応させる必要があります。

+0

残念ながら、残念なことにlistviewは、私が画面を離れて戻り、adapter.notifyDataSetChanged()であっても更新されません。どんなアイデアですか? – LBJ33

+0

@ LBJ33、活動を再読み込みしようとします。 – Stanojkovic

関連する問題