Ubuntu 20.04下QSqlDatabase连接SQLite写入无效问题求助
问题:Qt连接SQLite数据库成功但未创建表到指定文件
我正在使用Ubuntu 20.04系统,尝试写入本地的database.db文件但未成功。相关代码如下:
QString dbName = "/home/mustafa/Desktop/Programlama/QC/Flash_Cards/database.db"; QSqlDatabase con = QSqlDatabase::addDatabase("QSQLITE", dbName); con.setUserName(dbName); if(!con.open()){ qDebug() << "failed"; }else{ qDebug() << "ok"; } QSqlQuery query(con); con.commit(); bool ok = query.exec("CREATE TABLE ltable (name TEXT, num INT)"); qDebug() << ok; con.commit(); con.close();
程序显示连接已打开且查询执行成功,但查看database.db文件发现为空,仿佛创建的是临时数据库,尽管已指定有效路径。我完全按照YouTube教程操作,但教程中的方法可行,我的却不行,恳请帮助。
解决方案
你的问题核心是未指定SQLite数据库的文件路径,导致Qt默认创建了内存临时数据库,程序关闭后数据直接丢失。
错误点拆解
QSqlDatabase::addDatabase("QSQLITE", dbName)的第二个参数是连接名称,不是数据库文件路径,你混淆了这两个概念con.setUserName(dbName)完全多余,SQLite不需要用户名验证- 缺少关键的
setDatabaseName()调用,没有告诉Qt要操作的本地.db文件位置
修改后的可运行代码
QString dbPath = "/home/mustafa/Desktop/Programlama/QC/Flash_Cards/database.db"; QSqlDatabase con = QSqlDatabase::addDatabase("QSQLITE"); con.setDatabaseName(dbPath); // 核心:指定数据库文件路径 if(!con.open()){ qDebug() << "连接失败:" << con.lastError().text(); // 打印具体错误信息,便于排查 }else{ qDebug() << "连接成功"; } QSqlQuery query(con); bool ok = query.exec("CREATE TABLE ltable (name TEXT, num INT)"); if(ok){ qDebug() << "表创建成功"; }else{ qDebug() << "表创建失败:" << query.lastError().text(); // 打印查询错误 } // SQLite默认自动提交,无需手动调用commit,除非你主动开启了事务 con.close();
额外提示
- 数据库操作时务必打印错误信息,不管连接还是查询失败,都能快速定位问题
- 若要使用事务,需先调用
con.transaction(),执行完操作后再con.commit(),否则手动commit无效 - 确认目标路径有读写权限,Ubuntu下可以用
chmod命令调整权限(比如chmod 644 /home/mustafa/Desktop/Programlama/QC/Flash_Cards/database.db)
内容的提问来源于stack exchange,提问作者Mustafa Aslan
相关产品推荐
相关产品推荐

