QSqlDatabase的数据库路径或名称问题

在Qt的数据库编程中,先是设置数据库的类型,然后是设置数据库文件的路径,或者数据库名称。若有数据库的用户名、密码,则分别调用setUserName("")、setPassword("")来设置用户名和密码;若没有,则省略用户名和密码。

  • 通过QSqlDatabase::addDatabase("")来设置数据库的类型;
  • 通过setDatabaseName("")来设置数据库的文件路径,或者数据库名称。

这个setDatabaseName("xxx.db")函数,对路径的依赖比较敏感。在Windows平台上,需要将路径的分割符号斜杠,要写成2个//斜杠。

1 SQLite类型

正常代码:

cpp 复制代码
	QSqlDatabase dbData = QSqlDatabase::addDatabase("QSQLITE","UID1000");
	//数据库路径
	QString strPath = QCoreApplication::applicationDirPath() + "//hello.db";
	dbData.setDatabaseName(strPath);	

注意在Windows平台上,若setDatabaseName("Path")里的Path是文件路径,则要写成双斜杠的形式;若写成单斜杠,会造成数据库可以打开,但无法查询,也无法插入的异常问题。

异常代码:

cpp 复制代码
	QSqlDatabase dbData = QSqlDatabase::addDatabase("QSQLITE","UID1000");
	//单斜杠,在Windows平台上,会造成数据库可以连接,但无法查询表中数据的Bug
	QString strPath = "D:/myDatabase/hello.db";
	dbData.setDatabaseName(strPath);

2 SQL Server类型

若SQL Server是以ODBC的方式与Qt程序进行连接,则setDatabaseName("")里要填写数据库的名称。

cpp 复制代码
    QSqlDatabase dbData = QSqlDatabase::addDatabase("QODBC");
    dbData.setHostName("127.0.0.1");
    dbData.setDatabaseName("hello");  //数据库名称
    dbData.setUserName("user");
    dbData.setPassword("xxx");
相关推荐
TDengine (老段)10 分钟前
TDengine IDMP 组态面板 —— 创建组态
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
SelectDB13 分钟前
Apache Doris + SelectDB:定义 AI 时代,实时分析的三大范式
大数据·数据库·数据分析
SelectDB13 分钟前
OLAP 无需事务?Apache Doris 如何让实时分析兼具事务保障
大数据·数据库·mysql
代码的奴隶(艾伦·耶格尔)16 分钟前
Hbase安装与使用
大数据·数据库·hbase
是梦终空11620 分钟前
Python深度学习入门:TensorFlow 2.0/Keras实战
jvm·数据库·python
NineData31 分钟前
AI 时代的数据对比:DBA 还需要盯着屏幕看差异吗?
数据库·人工智能·dba·数据库管理工具·数据一致性·数据对比·异构迁移
原来是猿41 分钟前
MySQL【基本查询上 - 表的增删改查】
数据库·mysql
scofield_gyb1 小时前
Redis简介、常用命令及优化
数据库·redis·缓存
難釋懷1 小时前
Redis搭建分片集群
数据库·redis·缓存
happymaker06261 小时前
JDBC(MySQL)——DAY04(调用存储过程,存储函数)
java·数据库·mysql