2013-10-04 6 views
11

WCF 마녀가 일부 JSON 데이터를 제공 한 다음 로컬 데이터베이스에 저장합니다. 잘 작동합니다. 활동 마녀가 로컬 데이터베이스의 데이터를 채워서 listview 마녀가 잘 작동합니다.안드로이드에서 테이블에서 모든 행을 삭제하는 가장 좋은 방법은 무엇입니까

public void fillData() { 

    // Fields from the database (projection) 
    // Must include the _id column for the adapter to work 
    String[] from = new String[] { TodoTable.COLUMN_SUMMARY }; 
    // Fields on the UI to which we map 
    int[] to = new int[] { R.id.label }; 

    getLoaderManager().initLoader(0, null, this); 
    adapter = new SimpleCursorAdapter(this, R.layout.todo_row, null, from, 
      to, 0); 

    lw.setAdapter(adapter); 
} 

내가 알 수없는 것은 WCF의 동기화 작업 이전에 모든 행을 삭제하는 가장 좋은 방법 일 것입니다.

그때 다음 행 URI를 찾을 데이터베이스에서 모든 아이디의를 받고하여이 작업을 수행하고 수 사용 :

getContentResolver().delete(uri, null, null) 

난 그냥 그물에 많은 예제를보고 더 좋은 방법이있을 가지고 생각 dbHelper 클래스를 사용하지만 활동 또는 그냥 테이블의 모든 행을 삭제하려면 어떤 의미를

+3

을 삭제하려는 테이블에 대한 DB 이름 databasetablename을 대체 ...하지만. .. uri는 특정 "item"을 가리 키지 않고 전체 "dir"을 가리켜 야합니다 (content : // com.authority/tablename/111' <= item uri,'content : // com.authority/tablename' <= dir uri) – Selvin

+0

그런 식이면 데이터베이스의 모든 ID를 찾을 필요가 없습니다. 당신이해야 할 일은 데이터베이스의 URI가 아니라 특정 항목이 아니라는 것입니다. – tyczj

+0

미안하지만 저에게는 새내기가되었습니다. (@ 셀빈. 답은 다 했어. 타이. '012ContentResolver(). delete (TodoContentProvider.CONTENT_URI, null, null);' – Jester

답변

28

DatabaseHelper 사용에서 모든 행을 삭제할 것을보십시오 :

dbHelper = new DatabaseHelper(context); 
database = dbHelper.getWritableDatabase(); 

public void clearTable() { 
    database.delete(TABLE, null,null); 
} 
+0

이렇게하면 전체 테이블이 삭제됩니까? 난 아직도 테이블을 그냥 행을 지우고 싶어요 –

+1

@ Tintinabulator Zea이 주어진 테이블에서 모든 행을 삭제합니다. 추가 정보 : http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#delete(java.lang.String, java.lang.String, String []) – Kristopher

+0

이것은입니다. 데이터 변경을 알리지 않기 때문에 최적이 아닙니다. 당신은 콘텐츠 제공자의 삭제 메소드를 오버라이드해야합니다. – hadi

-1

를 만드는 컨텐트 프로

희망을 통해 dbHelper 클래스에 액세스하는 방법을 알아낼 수 없습니다 :

drop table if exists "tablename" 

그런 다음 해당 열을 사용하여 테이블을 다시 만드십시오. 개인적으로 이렇게하는 것이 훨씬 쉽습니다.

+0

DB 업그레이드를 계획하는 경우 테이블 생성 쿼리의 다른 버전을 유지해야하기 때문에 이것은 좋은 생각이 아닙니다. – npace

+0

나는 대개 패치 접근법을 취했다. 이전 생성을 유지하고 필요한 업데이트 구문을 테이블에 적용한다. 그런 다음 작성시 모든 명령문을 적용 할 수 있습니다 (적용 불가능한 경우 안전하게 실패하게하십시오). 그리고 발사 당 최신 상태로 유지하십시오. 하지만 멀티 인스턴스 설치에서는 잘 작동하지 않습니다 (중앙 DB를 미리 올바르게 설정하고자하는 경우) – Rogue

+0

이렇게하면 표를 지울 수 없습니다. 그러나 SQL 자체 삭제 쿼리로 쉽게 솔루션을 찾을 수 있습니다. – Mahmudul

6

이 같이 할 수

<your-SQLite-instance>.execSQL("DELETE FROM <table_name>"); 

<table_name>

+1

문서 읽기 : execSQL() SELECT/INSERT/UPDATE/** DELETE **가 아닌 단일 SQL 문을 실행하십시오. – Selvin

+1

@Selvin 당신도'execSQL (String sql, Object [] bindArgs)'에 대해서 읽어야합니다.'execSQL (String sql)'에는 없습니다. 내가 게시 한 코드는 프로덕션에서 사용되며 작동합니다 ... – bclymer

+1

괜찮음 :'영향을받은 행의 수와 같은 데이터를 반환 할 수단이 없습니다 .' DELETE는 영향을받은 번호를 반환합니다. '내가 게시 한 코드가 사용되었습니다. (execql (String sql)'doc에 나와 있듯이) – Selvin

2

테이블의 모든 행을 삭제하려면이 코드를 사용해보십시오 :

database.delete(tablename, null,null); 

그냥 당신이 다음`getContentResolver는(). (URI, NULL, NULL)`괜찮 삭제 자신의 컨텐트 프로가 있다면 당신은 행

관련 문제