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

时间:2013-05-30 06:50:06

标签: c++ database sqlite qt

我想在我的数据库中插入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");

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

2 个答案:

答案 0 :(得分:0)

根据您的错误消息table login_t already exists,我可以告诉您,当此表已存在时,您尝试创建表login_t。 (您应该尝试创建空DB(不带表),并在修复prepare语句时再次运行代码)

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

答案 1 :(得分: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表。