QT删除sqlite数据库一条用户,为什么查询又出来了
时间: 2023-09-27 22:10:21 浏览: 154
可能是因为你删除的数据没有被彻底清除。在使用 SQLite 数据库时,执行删除操作只是将数据标记为已删除,而不是真正从数据库中删除数据。这是因为 SQLite 是一种轻量级数据库,它尽可能地减少了磁盘 I/O 操作,以提高性能。
如果你想完全删除数据,可以使用 VACUUM 命令进行清理。VACUUM 命令可以重建数据库文件,删除被标记为已删除的数据,并且重新组织数据库文件,使其更加紧凑。
示例代码:
```
QSqlQuery query;
query.exec("DELETE FROM user WHERE id = 1"); // 删除id为1的用户
query.exec("VACUUM"); // 清理数据库并重新组织
```
执行完以上代码后,再次查询数据库,应该就不会出现已删除的数据了。
相关问题
使用qt代码往sqlite数据库中添加一条记录
好的,我可以回答这个问题。你可以使用Qt提供的QSqlQuery类来向SQLite数据库中添加一条记录。以下是一个示例代码:
```cpp
#include <QtSql>
// 创建数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("database.db");
if (!db.open()) {
qDebug() << "Failed to open database!";
}
// 执行插入操作
QSqlQuery query;
query.prepare("INSERT INTO table_name (column1, column2) VALUES (:value1, :value2)");
query.bindValue(":value1", "hello");
query.bindValue(":value2", "world");
if (!query.exec()) {
qDebug() << "Failed to insert record!";
}
// 关闭数据库连接
db.close();
```
注意,你需要将`table_name`、`column1`和`column2`替换为你实际使用的表名和列名。
在qt创建一个SQLite数据库
在 Qt 中创建 SQLite 数据库的步骤如下:
1. 首先在 Qt 项目中包含 SQLite 头文件和库文件。
```cpp
#include <QtSql>
```
2. 使用 QSqlDatabase 类创建一个数据库对象,并指定数据库类型为 SQLite。
```cpp
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
```
3. 指定数据库文件的路径和文件名。
```cpp
db.setDatabaseName("path/to/database.db");
```
4. 打开数据库。
```cpp
if (!db.open()) {
// 打开数据库失败
}
```
5. 如果需要创建新的表,可以使用 QSqlQuery 类执行 SQL 命令。
```cpp
QSqlQuery query;
query.exec("CREATE TABLE IF NOT EXISTS students ("
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
"name VARCHAR(50) NOT NULL, "
"age INTEGER NOT NULL"
")");
```
完整示例代码如下:
```cpp
#include <QCoreApplication>
#include <QtSql>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("path/to/database.db");
if (!db.open()) {
qWarning() << "Failed to open database.";
return 1;
}
QSqlQuery query;
query.exec("CREATE TABLE IF NOT EXISTS students ("
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
"name VARCHAR(50) NOT NULL, "
"age INTEGER NOT NULL"
")");
// 插入数据
query.prepare("INSERT INTO students (name, age) VALUES (:name, :age)");
query.bindValue(":name", "Tom");
query.bindValue(":age", 20);
query.exec();
// 查询数据
query.exec("SELECT * FROM students");
while (query.next()) {
int id = query.value("id").toInt();
QString name = query.value("name").toString();
int age = query.value("age").toInt();
qDebug() << id << name << age;
}
db.close();
return a.exec();
}
```
在这个示例中,我们创建了一个名为 students 的表,包含 id、name 和 age 三个字段。然后插入一条数据,并查询所有数据。
阅读全文