2016-08-12 65 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

[無法從android中的sqlite中清除表格](http://stackoverflow.com/questions/11951698/can-not-clear-table-from -sqlite-in-android) –

+0

我得到它的工作,謝謝,不幸的是,listview不會更新,直到我離開屏幕並返回,即使與adapter.notifyDataSetChanged(); ..任何想法? – LBJ33

回答

1

它會更快到丟失表然後創建表然後試圖從表中刪除數據。

如果要執行完整刪除,也可以刪除整個數據庫並重新創建它。

+0

我得到它的工作,謝謝,不幸的是,listview不會更新,直到我離開屏幕並返回,即使與adapter.notifyDataSetChanged(); ..任何想法? – 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