我想在我的数据库中插入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");
我之前制作了数据库和表格。
答案 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
表。