目录
学习记录,如有错误欢迎指正。如有侵权纯属巧合(以下操作在同事帮助下完成)
参考链接:从 相对路径 说开来(从C++到Qt)_1+1=10-CSDN博客_qt相对路径
一、xml文件
我单纯的把*.txt记事本的后缀名改成了*.xml
xml的具体内容如下
<?xml version="1.0" encoding="UTF-8"?>
<paras>
<DataBaseConfig>
<hostName>127.0.0.1</hostName>
<port>3306</port>
<datebase>planedb</datebase>
<username>root</username>
<passWord>123456</passWord>
</DataBaseConfig>
</paras>
其中hostName、port、datebase、username、password都是我自定义标签,
后面读取数据,也是通过标签来读取。
二、qt中编写数据库读取xml函数
//读取XML文件
//filePath 文件路径 valuename 标签名
QString DBHelper::readXmlfile(const QString &filePath, const QString& valueName)
{
//打开或创建文件
QFile file(filePath);
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
//构建QXmlStreamReader对象
QXmlStreamReader reader(&file);
while (!reader.atEnd())
{
//若xml的标签跟形参匹配
if (reader.name() == valueName)
{
//返回xml标签内的值
return reader.readElementText();
}
else
{
//若不匹配,则查看下一个标签是否匹配
reader.readNext();
}
}
//关闭文件
file.close();
}
else
{
return "配置文件打开失败!";
}
return "nullptr";
}
三,实现数据库连接函数
bool DBHelper::ConnDB()
{
QSqlDatabase db;
//1、原始连接数据库方法
// db = QSqlDatabase::addDatabase("QMYSQL");
// db.setHostName("127.0.0.1");
// db.setPort(3306);
// db.setDatabaseName("planedb");
// db.setUserName("root");
// db.setPassword("123456");
//2、用xml连接数据库方法
db = QSqlDatabase::addDatabase("QMYSQL");
QString filePath = "../plane/MysqlXml.xml";//相对路径
//设置标签名称
QString hostName = "hostName";
QString port = "port";
QString datebase = "datebase";
QString username = "username";
QString passWord = "passWord";
//读取xml文件
if(readXmlfile(filePath, hostName) != "false")
{
//若成功则控制台打印hostName
qDebug() << __LINE__ << "DBHelper.cpp" << readXmlfile(filePath, hostName);
}
else
{
//失败则控制台打印失败
qDebug() << QStringLiteral("XML文件打开失败!");
//返回false
return false;
}
//读取xml成功则配置数据库参数
db.setHostName(readXmlfile(filePath, hostName));
db.setPort(readXmlfile(filePath, port).toInt());
db.setDatabaseName(readXmlfile(filePath, datebase));
db.setUserName(readXmlfile(filePath, username));
db.setPassword(readXmlfile(filePath, passWord));
//返回数据库打开情况
return db.open();
}
四、使用上述函数
//获取数据库类中的方法ConnDB(三中编写的函数)
//m_pDBHelper是自定义数据库类的指针,在头文件中定义的
bool dbhlper = m_pDBHelper->ConnDB();
//结果取反,若连接失败则报错退出
if(!dbhlper)
{
QMessageBox::warning(this, "connectDB", "error", QMessageBox::Ok);
return;
}
//否则显示成功对话框
QMessageBox::warning(this, "connectDB", "success", QMessageBox::Ok);
然后就成功啦
结果:
五、补充(相对路径)
在上述内容中,我使用了相对路径
QString filePath = "../plane/MysqlXml.xml";//相对路径
在qt中当前路径.(一个点)是在这个构建目录下(如下图)
而我的xml文件路径为
所以我直接./*.xml是找不到我的文件的。
而我想使用相对路径找到该xml文件,则需要根据构建目录为当前目录所在位置。通过寻找构建目录的上级目录寻找自己所需要的文件。即
返回它的上级目录,并进入plane文件夹,从而或许所需的*.xml文件
故,我的xml文件相对路径为:
"../plane/MysqlXml.xml";//相对路径