时间2022.11.07
这几天刚写的, 可以运行, 直连数据库, 以后可能用到, 记录一下
比较棘手的还是前面的QT缺失dll, 需要自己配置
环境:QT5.14, MYSQL5.7
// 连接SQL
void LoginForm::connectToSQL(){
db = QSqlDatabase::addDatabase("QMYSQL");//指定 mysql 数据库
db.setHostName("127.0.0.1");//本地
db.setPort(3306); // 端口
db.setUserName("root"); // 名字
db.setPassword(""); // 密码
db.setDatabaseName("test"); // 所要连接的数据库的库名
db.open();
if(!db.open())
{
qDebug()<<"不能连接"<<"connect to mysql error";
QMessageBox::information(this, "提示", "connect to mysql error!", QMessageBox::Yes);
return ;
}
}
下面的内容因为牵扯一部分UI, 大家主要看SQL部分, SQL操作是没错的
// 登录操作
void LoginForm::login()
{
connectToSQL();
QSqlQuery query(db);
QString strCmd = QString("SELECT * FROM UserInfo WHERE NAME='%1'").arg(userNameLEd->text().trimmed());
query.prepare(strCmd);
if (query.exec()){
LoginForm::userName = userNameLEd->text().trimmed();
}
else{
QMessageBox::information(this, "提示", "数据库错误,登录失败!", QMessageBox::Yes);
}
while(query.next()){
qDebug()<<query.value("PWD").toString();
}
QByteArray str = QCryptographicHash::hash((pwdLEd->text()).toLatin1(),QCryptographicHash::Md5);
QString MD5;
MD5.append(str.toHex());
qDebug()<<MD5;
// 获得userNameLEd输入框的文本:userNameLEd->text();
// trimmed()去掉前后空格, tr()函数防止设置中文时乱码
if(userNameLEd->text().trimmed() == tr("liang") && pwdLEd->text() == MD5)
{
}
else{
QMessageBox::information(this, "提示", "用户名或密码错误!", QMessageBox::Yes);
// 清空输入框内容
userNameLEd->clear();
pwdLEd->clear();
//光标定位
userNameLEd->setFocus();
}
}
// 注册
void LoginForm::signUp(){
connectToSQL();
QSqlQuery query(db);
QString strCmd = QString("select * from UserInfo WHERE NAME='%1'").arg( ->text().trimmed());
query.prepare(strCmd);
bool _usedName = 1;
while (query.next())
{
_usedName = 0;
}
// 如果该用户名已被注册,则不能使用
if( _usedName ){
QMessageBox::information(this, "提示", "该用户名已被注册!", QMessageBox::Yes);
return;
}
query.prepare("INSERT INTO UserInfo (NAME, PWD, BALANCE) VALUES (:NAME, :PWD, 0)");
QByteArray str = QCryptographicHash::hash((pwdLEd->text()).toLatin1(),QCryptographicHash::Md5);
QString MD5;
MD5.append(str.toHex());
query.bindValue(":NAME", userNameLEd->text().trimmed()); //给每个插入值标识符设定具体值
query.bindValue(":PWD", MD5);
query.exec();
}