QString mySocket::login(QString userAndPassword)
{
if(!connect2DB())
{
qDebug()<<"打开数据库发生错误!";
}
qDebug()<<"客户端传来的用户名和密码:"<<userAndPassword;
QString strSQL = "SELECT * FROM login";
QSqlQuery query;
qDebug()<< query.exec(strSQL);
while(query.next()) //遍历每一条记录
{
QString compare = query.value(0).toString() + "#" + query.value(1).toString();
qDebug()<<compare;
if(userAndPassword == compare)
{
QString typeofID = query.value(2).toString();
db.close();
return typeofID;
}
}
db.close();
QString error = "error";
return error;
}
在服务器端进行数据库查询时,发现总是查询不到数据,通过qDebug()语句输出query.exec(strSQL)的return值,发现返回为false,查询失败。而且数据库成功打开,没有报错。下面是数据库的打开函数:
bool mySocket::connect2DB()
{
if(QSqlDatabase::contains("qt_sql_default_connection"))
db = QSqlDatabase::database("qt_sql_default_connection");
else
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(databasePath);
if(!db.open())
{
qDebug()<<"open database error!";
return false;
}
return true;
}
其中databasePath的路径是“./hospital.db”,使用的是相对路径。后来尝试将相对路径改为绝对路径,就成功查询到数据。所以应该是相对路径的使用发生了错误。
相对路径“./hospital.db”中的“.”其实指的是项目路径,如下图:
所以上面的相对路径对应的绝对路径应该是:
E:\database_homework\hospital_Server\build-hospital_server-Desktop_Qt_5_2_0_MinGW_32bit-Debug\hospital.db
但实际上我的数据库放在了:
E:\database_homework\hospital_Server\hospital_server\hospital.db
那么为什么打开数据时没有报错呢?到上面的相对路径下也发现了hospital.db文件,但是内容却是空的。之所以会出现能打开数据库却查询不到数据的问题,就是因为这个。在打开一个不存在的数据库文件时,它在指定的路径下去创建了一个同名的空数据库,所以上面的打开数据函数还是有问题,不能发现打开了错误的数据库,至于怎么修改还没想到。
这次问题的根本原因还是自己忘记了相对路径的正确使用方法,没有给出数据库的正确路径,给调试带来了很多麻烦,下次注意。