“从表中删除”不删除表?

时间:2010-12-31 12:40:50

标签: c++ sql sqlite

我创建“database.db”,一切顺利,但为什么不在最后删除表?每次运行它,我都会在创建表时出现“table already exists”错误消息。

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;
}

此外,主键是否可以在数据库中存在的最后一个更大的键之后自动生成?

4 个答案:

答案 0 :(得分:7)

您需要使用drop tabledelete删除表格中的行。

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

SQLite将自动递增声明为主键的整数字段。请参阅here

答案 1 :(得分:2)

使用DELETE命令删除表的行。

使用DROP命令删除整个表或其他数据库项。

要创建表格,如果您不确定是否存在,也可以使用CREATE TABLE IF NOT EXISTS

要在id INTEGER PRIMARY KEY命令中使用CREATE TABLE,请使用自动生成的行ID。

答案 2 :(得分:2)

  1. 使用DROP TABLE
  2. 来自SQLite docs:
  3.   

    通常的算法是为新创建的行提供一个比插入前表中最大ROWID大的ROWID。

答案 3 :(得分:0)

DML“delete from test”会删除表测试中的所有行。如果您想放弃表格,请改为使用“delete table test”或“drop table”。