0

我想将 2 插入QString到我的数据库中,但我遇到了这个错误:

QSqlError(1, "Unable to execute statement", "table login_t already exists")

我的数据库是空的,我的代码是:

void School::set_db( QString usern, QString pass )
{
    QSqlDatabase db1 =QSqlDatabase::addDatabase("QSQLITE");
    db1.setDatabaseName( "school1.db");
    bool isOpen = db1.open() ;
    QSqlQuery q(db1);
    QString queryString = "INSERT INTO login_t (user, pass) VALUES (?,?)";
    q(queryString);
    q.addBindValue(usern);
    q.addBindValue(pass);
    q.exec();
}
set_db("user1" , "pass1");

我之前制作了我的数据库和表格。

4

2 回答 2

1

根据您的错误消息table login_t already exists,我可以告诉您,您尝试login_t在该表已经存在时创建表。(您应该尝试创建空数据库(没有表),当您修复准备语句时,再次运行您的代码)

另一方面,如果您在运行代码之前创建数据库和表,则只需要在查询中修复准备语句。(不要忘记,dataBaseName 采用您的数据库的完整路径。如果您写school.db,它将在文件附近搜索您的数据库bin文件)

于 2013-05-30T07:16:46.337 回答
0

确保正确创建了数据库。您可以使用SQLite Studio等外部工具来执行此操作。您还可以尝试“重新创建”整个数据库并检查问题是否已解决。

查看下面的代码:

bool School::set_db(QString usern, QString pass)
{
    QSqlDatabase db1 = QSqlDatabase::addDatabase("QSQLITE");

    // You need to set the full path to the database file. E.g.: "C:/Databases/school1.db"
    db1.setDatabaseName("school1.db");

    if( !db1.open() )
    {
        qDebug() << "Could not open the database connection!";
        qDebug() << "Error:" << db1.lastError();
        return false;
    }

    QSqlQuery query(db1);
    QString queryString = "INSERT INTO login_t (user, pass) VALUES (:user, :pass)";

    if( !query.prepare(queryString) )
    {
        qDebug() << "Prepare:" << query.lastError();
        return false;
    }

    query.addBindValue(":user", usern);
    query.addBindValue(":pass", pass);

    if( !query.exec() )
    {
        qDebug() << "Exec:" << query.lastError();
        return false;
    }

    return true;
}

set_db("user1", "pass1");

我不确定,但您显示的错误消息似乎打印在另一个代码块中。也许在您尝试创建login_t表的某个地方。

于 2017-01-13T14:25:51.217 回答