2013-01-22 3 views
6

업데이트 된 정보가있는 테이블을 삭제하고 다시 만드는 방법은 무엇입니까?SQLite 삭제 및 다시 만들기

예 : 내 응용 프로그램에 5 개의 레코드가있는 테이블이 있습니다. 실제로

ID  Entry 
1  a 
2  b 
3  d 
4  e 

: 나는 삭제할 때

ID  Entry 
1  a 
2  b 
3  c 
4  d 
5  e 

지금 기록은 ID 3 테이블 내가 그것을 삭제하고이되기 위해 그것을 다시 어떻게

ID  Entry 
1  a 
2  b 
4  d 
5  e 

이되고, 말할 수 삭제는 사용자가 제어하므로 언제든지 모든 레코드를 삭제할 수 있습니다.

+0

왜 당신이 달성하고자하는 않는 타 방법? 일부 사용자가 데이터베이스를 변경할 때마다 데이터베이스를 다시 작성해야합니다. – Leandros

+1

왜 이것을 필요로합니까? 귀하의 질문에 대답하는 성가신 방법을 찾는 것보다는 차라리 그것을 필요로하지 않는 방법을 찾아야합니다. – njzk2

+0

번호. 데이터베이스가 아닌 테이블을 다시 만들고 싶습니다.왜 몇 가지 이유가 있습니다. 예 : 레코드가 삭제되면 행 4까지만 선택할 수 있으므로 삭제 프로세스는 현재 선택된 행으로 처리되고 ID 5는 절대로 삭제할 수 없습니다. – Pztar

답변

13

당신은 다음을 수행 할 수 :

 db.execSQL("DROP TABLE IF EXISTS " + YOUR_TABLE); 

:

 public boolean deleteRow(int id) 
     { 
     return db.delete(YOUR_TABLE, ROW_ID + "=" + _id, null) > 0; 
     } 

는 ArrayList의에 남아있는 항목 (항목 만이 아닌 ID)를 읽고, 귀하의 테이블을 삭제 : 삭제하려는 행을 삭제 그리고 당신의 테이블을 재현하십시오. 그런 다음 ID 번호는 1-XX 주문에서 다시 나타납니다

+1

그게 제가 가진 것입니다. 그러나 테이블을 놓은 다음 다시 만들 때 NullPointer로 돌아옵니다. 나는 내가 더 많이 그것 주위에 피들을 져야 할 것이다 고 생각한다. – Pztar

+0

당신은 이것을 한 곳에서 코드를 보여줄 수 있습니까? 예를 들어 잘못된 순서로 작업 한 경우 테이블을 arrayList에 저장하기 전에 삭제할 수 있습니다. 이것이 당신이 널 포인터를 얻는 이유가 될 수 있습니다. 우리가 말하는 독일에서는 숲이 너무 많은 나무 때문에 보이지 않는 경우가 있습니다. – Opiatefuchs

+0

EXISTS – Matthew

1

나는 이것이 오래된 게시물 인 것을 알고 있습니다 만, 귀하의 의견을 바탕으로 같은 일을하는 다른 사람들을 위해 일을 정리할 것이라고 생각했습니다 :

난 단지 4 행을 선택할 수 있기 때문에 기록이 삭제 프로세스를 삭제

가 현재 선택한 행에 의해 수행되며, ID 5 이 삭제되지 않을 수 있습니다.

정말로 ID를 다시 작성하면 안됩니다. 다른 테이블에서 키로 사용되면 큰 문제가 생깁니다. 대용량 데이터베이스의 경우 다시 만들 필요가 없을 때 시간을 낭비 할 수 있습니다.

당신이해야 할 일은 항목의 배열과 함께 ID의 배열을 저장하여 선택한 행 (또는 ID와 값을 연결하는 다른 방법으로 삭제할 ID를 알 수 있도록하기 위해서입니다. 그들 나중에). 누군가가 ID 3 행을 삭제 한 후 위의 예에서

, 당신의 배열은 다음과 같이 보일 것이다 :

entries = { "a","b","d","e" } 
ids = { 1,2,4,5 } 

누군가가 네 번째 항목 인 "E"를 선택하면

, 당신은 단순히에서 삭제 id가 ids 배열의 4 번째의 값 (이 경우 5)과 동일한 테이블

이 방법을 사용하면 항목을 지속적으로 추가하고 제거하는 경우 데이터베이스의 ID가 2, 34, 56 및 435가 될 수 있습니다. 코드에서 추적 할 ID를 추적하고 알 수 있으므로 중요하지 않습니다.

0

public boolean deleteTable(int id) { 
    SQLiteDatabase database = dbHelper.getReadableDatabase(); 
    final String whereClause = DBHelper.COLUMN_ID + "=?"; 
    final String whereArgs[] = {String.valueOf(id)}; 
    int affectedRows = database.delete(DBHelper.TABLE_NAME_OGR, whereClause, whereArgs); 
    return affectedRows > 0; 
}