2010-12-31 5 views
4

"database.db"를 만들면 모든 것이 정상이지만 왜 결국 테이블을 삭제하지 않겠습니까? 매번 실행할 때마다 테이블을 만들 때 "테이블이 이미 있습니다"라는 오류 메시지가 표시됩니다."테이블에서 삭제"테이블을 삭제하지 않습니까?

int main() 
{ 
sqlite3 *db; //Database Handle 
char *zErr; 
int rc; 
char *sql; 

rc = sqlite3_open("database.db", &db); 

if(rc) 
{ 
    cout << "Can't open database: " << sqlite3_errmsg(db) << endl;; 
    sqlite3_close(db); 
    exit(1); 
} 

sql = "create table test(PID int primary key, Name text)"; //sql query 

rc = sqlite3_exec(db, sql, NULL, NULL, &zErr); //execute sql statement 

if(rc != SQLITE_OK) 
{ 
    if (zErr != NULL) 
    { 
    cout << "SQL error: " << zErr << endl; 
    sqlite3_free(zErr); 
    } 
} 
else 
{ 
    sql = "insert into test values (1,'John')"; 
    rc = sqlite3_exec(db, sql, NULL, NULL, &zErr); 

    sql = "insert into test values (2,'Smith')"; 
    rc = sqlite3_exec(db, sql, NULL, NULL, &zErr); 
} 



    //delete the table on exit. 

rc = sqlite3_exec(db, "delete from test", NULL, NULL, &zErr); 

sqlite3_close(db); 
return 0; 
} 

또한 데이터베이스에있는 마지막 큰 키 다음에 기본 키를 자동 생성 할 수 있습니까?

+0

당신은 auto_increment를 의미합니까? 예 sqlite는 auto_increment를 지원합니다. 테이블을 디자인하고 디자인하려면 firefox 용 Sqlite Manager 플러그인을 살펴보십시오. https://addons.mozilla.org/en-US/firefox/addon/5817/ – allenskd

답변

7

drop table을 사용해야합니다. delete은 테이블의 행을 삭제합니다.

rc = sqlite3_exec(db, "drop table test", NULL, NULL, &zErr); 

SQLite는 기본 키로 선언 된 정수 필드를 자동 증가시킵니다. here을 참조하십시오.

0

DML "delete from test"은 테이블 테스트에서 모든 행을 삭제합니다. 표를 삭제하려면 대신 "delete table test"또는 "drop table"을 입력하십시오.

2

명령을 사용하여 테이블의 행을 삭제합니다.

DROP 명령을 사용하면 전체 테이블이나 다른 DB 항목을 삭제할 수 있습니다.

테이블을 만들려면 확실하지 않은 경우 CREATE TABLE IF NOT EXISTS을 사용할 수도 있습니다.

자동 생성 된 행 ID를 얻으려면 CREATE TABLE 명령에서 id INTEGER PRIMARY KEY을 사용하십시오.

2
  1. DROP TABLE을 사용하십시오. SQLite는 문서에서
  2. :

일반적인 알고리즘은 새로 생성 된 행을 삽입하기 전에 테이블에서 가장 큰 ROWID 이상의 큰 ROWID를 제공하는 것입니다.

관련 문제