【发布时间】:2017-03-08 23:00:29
【问题描述】:
我无法使用我的 qt 应用程序连接到我的 sqlite 数据库。 我有一个帮助类 DBManager,它应该具有打开和关闭数据库的功能,因为我想在多个地方重用代码。 这是 dbmanager.cpp
DBManager::DBManager()
{
}
void DBManager::connOpen()
{
path = QCoreApplication::applicationDirPath() + "/GameSuitedb.db";
mydb=QSqlDatabase::addDatabase("QSQLITE");
mydb.setDatabaseName(path);
void DBManager::connClose() /*Closes connection and commits changes to database*/
{
mydb.close();
mydb.removeDatabase(QSqlDatabase::defaultConnection);
}
请注意,我的数据库名为 GameSuitedb,位于可执行文件旁边 这是我试图访问我的数据库的地方:
void CreateUser::on_pushButton_submit_clicked()
{
dbmanager.connOpen();
QString username = ui->lineEdit_username->text();
QString password = ui->lineEdit_password->text(); //Gets password text
QSqlQuery qry(dbmanager.mydb);
qry.prepare("INSERT INTO users (username,password) VALUES ('"+username+"', '"+password+"')");
if(qry.exec()){
}
else{
ui->statusbar->showMessage(qry.lastError().text());
}
dbmanager.connClose();
}
上面代码在启动时给我的错误是 QSqlQuery::prepare: database not open.
【问题讨论】:
-
您是否在调试器中验证过
path变量与您认为的一样?此外,请阅读如何使用准备好的查询——您当前的代码包含明显的 SQL 注入攻击机会。 -
如果文件夹中不存在数据库文件,qt中的sqlite支持至少会尝试创建一个新的db。