我创建“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;
}
此外,主键是否可以在数据库中存在的最后一个更大的键之后自动生成?
答案 0 :(得分:7)
您需要使用drop table
。 delete
删除表格中的行。
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)
通常的算法是为新创建的行提供一个比插入前表中最大ROWID大的ROWID。
答案 3 :(得分:0)
DML“delete from test
”会删除表测试中的所有行。如果您想放弃表格,请改为使用“delete table test
”或“drop table
”。