我应该如何插入qstring sqlite数据库在qt

how should i insert qstring to sqlite database in qt

本文关键字:sqlite qstring 数据库 qt 插入 何插入 我应该      更新时间:2023-10-16

我想插入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");

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

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

确保正确创建了数据库。您可以使用外部工具(如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