2010-12-31 21 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

DELETEコマンドを使用して、テーブルの行を削除します。

DROPコマンドを使用して、テーブル全体または他のDBアイテムを削除します。

テーブルが作成されているかどうかわからない場合はCREATE TABLE IF NOT EXISTSも使用できます。

CREATE TABLEコマンドでid INTEGER PRIMARY KEYを使用すると、自動生成された行IDを取得できます。

2
  1. DROP TABLEを使用してください。 SQLiteのドキュメントから

通常のアルゴリズムは、新しく作成された行を挿入する前に、テーブル内の最大ROWIDより1大きいROWIDを与えることです。

関連する問題