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

불행히도 listview는 화면을 떠나고 adapter.notifyDataSetChanged()와 함께 돌아올 때까지 업데이트되지 않습니다. 어떤 아이디어입니까? – LBJ33

답변

1

그것은 드롭 테이블에 더 빨리 다음 테이블에서 데이터를 삭제하려고 다음 표을 생성합니다.

전체 삭제를 원할 경우 전체 데이터베이스를 삭제하고 다시 만들 수도 있습니다. 이 sould 작업 같은

+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

관련 문제