"удалить из таблицы" не удаляет таблицу? - PullRequest
4 голосов
/ 31 декабря 2010

Я создаю «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;
}

Кроме того, могут ли первичные ключи генерироваться автоматически после последнего большего ключа в базе данных?

Ответы [ 4 ]

7 голосов
/ 31 декабря 2010

Вам нужно использовать drop table.delete удаляет строки в таблице.

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

SQLite автоматически увеличивает целочисленное поле, объявленное в качестве первичного ключа.Смотри здесь .

2 голосов
/ 31 декабря 2010
  1. Используйте DROP TABLE .
  2. Из документов SQLite:

Обычный алгоритм - присвоить вновь созданной строке ROWID, который на один больше, чем самый большой ROWID в таблице до вставки.

2 голосов
/ 31 декабря 2010

Вы используете команду DELETE для удаления строк таблицы.

Вы используете команду DROP для удаления всей таблицы или другого элемента БД.

Чтобы создать таблицувы также можете использовать CREATE TABLE IF NOT EXISTS, если не уверены, существует ли он.

Чтобы получить автоматически сгенерированные идентификаторы строк, используйте: id INTEGER PRIMARY KEY в вашей команде CREATE TABLE.

0 голосов
/ 31 декабря 2010

DML "delete from test" действительно удаляет все строки из теста таблицы.Если вы хотите сбросить стол, попробуйте вместо этого "delete table test" или "drop table".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...