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