QT连接Oracle数据库并实现登录验证的操作步骤
作者:mrr 发布时间:2024-01-27 13:06:44
标签:QT,Oracle,登录,验证
目的:
本文实现QT登录界面,输入账号和密码后,系统连接Oracle数据进行判断账号和密码(MD5加密)是否和数据库一致,如果一致则提示登录成功。
开发环境:Windows10+QT5.14.2+Oracle11G R2
操作步骤:
1、打开QT软件,创建一个新的Application项目
2、设计界面并修改代码:
2.1修改项目配置文件,添加sql字符串表示要对数据库进行操作。
2.2登录界面LoginForm设计
2.3编写登录界面代码
LoginForm.h代码如下:
#ifndef LOGINFORM_H
#define LOGINFORM_H
#include <QMainWindow>
#include <QSqlDatabase>
#include <QSqlQuery>
QT_BEGIN_NAMESPACE
namespace Ui { class LoginForm; }
QT_END_NAMESPACE
class LoginForm : public QMainWindow
{
Q_OBJECT
public:
LoginForm(QWidget *parent = nullptr);
~LoginForm();
void initsql(); //初始化数据库
private slots:
void on_pushButton_clicked();
QString encrypt(const QString &str);//自定义加密函数
private:
Ui::LoginForm *ui;
QSqlDatabase db;
QSqlQuery *query;
};
#endif // LOGINFORM_H
#include "loginform.h"
#include "ui_loginform.h"
#include <QStackedWidget>
#include <QMessageBox>
#include <QDebug>
#include <QWidget>
#include <QCryptographicHash>
LoginForm::LoginForm(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::LoginForm)
{
ui->setupUi(this);
initsql();//打开数据库连接
}
LoginForm::~LoginForm()
{
delete ui;
}
//登录验证账号密码是否正确
void LoginForm::on_pushButton_clicked()
{
//获得用户和密码
QString name=ui->lineEdit->text();
QString password=ui->lineEdit_2->text();
QByteArray ba = password.toUtf8();
QByteArray md5Password = QCryptographicHash::hash(password.toUtf8(), QCryptographicHash::Md5).toHex();
QString str=QString("select * from USER where UserName='%1' and Password='%2'").arg(name).arg(encrypt(password));
qDebug()<<str;
query=new QSqlQuery;
query->exec(str);
query->last();
int record=query->at()+1;
if(record==0){
QMessageBox::information(this,"提示","用户或密码不对",QMessageBox::Ok);
}
else{
QMessageBox::information(this,"提示","系统登录成功",QMessageBox::Ok);
}
}
//MD5加密函数
QString LoginForm::encrypt(const QString &str)
{
//字符串MD5算法加密
QByteArray btArray;
btArray.append(str);//加入原始字符串
QCryptographicHash hash(QCryptographicHash::Md5); //Md5加密算法
hash.addData(btArray); //添加数据到加密哈希值
QByteArray resultArray =hash.result(); //返回最终的哈希值
QString md5 =resultArray.toHex();//转换为16进制字符串
return md5.toUpper();
}
//初始化打开数据库连接
void LoginForm::initsql()
{
/*若输出列表中出现QOCI8和QOCI,则表示驱动加载成功*/
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() <<"\t" << driver;
//数据库连接
db = QSqlDatabase::addDatabase("QOCI");
db.setHostName("192.168.1.100");//数据库服务器ip
db.setPort(1521);//数据库端口号
db.setDatabaseName("orcl");//数据库名称
db.setUserName("dbUserName");//数据库用户名
db.setPassword("dbUserPassword");//数据库密码
db.open();
}
3、按F5开始调试运行
4、代码地址:
https://codechina.csdn.net/xqf222/qtlogin/
来源:https://blog.csdn.net/xqf222/article/details/113361701


猜你喜欢
- 简介Simon Willison来自英国,是一名经验丰富的开发人员。曾工作于Yahoo,是Web开发框架Django的创始人之一,也是Ope
- 又是一杯奶茶~事情的经过是这样的:又是奶茶,行吧行吧。快点开工,争取李大伟回来之前搞定。李大伟说是6位数字密码那么我们可以利用python生
- 前言我们在开发后台项目常常会遇到一个情况,功能模块列表数据导出Excel功能,但列表中某个字段无法通过Sql联表查询,且一次性查询再匹对也不
- Golang 是一种简洁高效的编程语言,拥有强大的并发支持和丰富的标准库。在 Golang 中,计时器(timer)是一种常见的工具,用于定
- F查询在上面所有的例子中,我们构造的过滤器都只是将字段值与某个我们自己设定的常量做比较。如果我们要对两个字段的值做比较,那该怎么做呢?Dja
- python天数转日期字符串在利用python读取Excel的时候, 日期格式的单元格读取出来是数字,该数字表示1990年01月01日到该日
- 周六。据闻北服美女甚多,于是应邀去做了一个关于UED的讲座。人不多,讲的很乱,但大家听的很认真,欣慰。讲完之后回答了很多关于社区、搜索、设计
- 前言声明: 以下文章所包含的结论都是基于 typeScript@4.9.4 版本所取得的。extends 是 typeScript 中的关键
- 今天做了个基于PyQt4和PySide的输入对话框.已放到PyPi中,包名wlab,大家可以使用pip安装:pip install wlab
- 自己写了一下,适用而已,不太好,应该还能优化。先自己记录一下。不说废话了,直接贴代码最好:/* * 获得时间差,时间格式为 年-月
- 一、人脸图像特征提取方法https://www.jb51.net/article/219446.htm二、对笑脸数据集genki4k进行训练
- 前言我们交换数组可以实现元素上下移动了,这个效果我们在表格或以前排序算法中都会用到,下面来看一个JavaScript下实现交换数组元素上下移
- 前言:今天带大家使用JavaScript定制一款网页时钟一、效果展示二、使用的技术主要使用了js的日期对象,实现的时候先创建一个日期对象,并
- 1、什么是哈希hashhash一类算法,该算法接受传入的内容,经过运算得到一串hash值hash值的特点:只要传入的内容一样,得到的hash
- 前言在学习过程中发现有时候交换字典的键和值,会使得我们最后的输出结果更加直观明了,整理出以下四种交换方式(data是原字典,new_data
- 具体代码如下所示:<?php//在子类或类内部用“::”调用本类或父类时,不是静态调用方法,而是范围解析操作符。class Paren
- 说明: (1)Linux版本Linux version 2.6.32.12-0.7-default (geeko@buildhost) (g
- 一般来说,我们为了得到更完整的结果,我们需要从两个或更多的表中获取结果,我一般都是用select xxx,xxx from 表1,表2 wh
- 内容摘要:现在博客很流行,相信应该上网时间稍微长点的朋友都会在这或者在那的有一个自己的博客。对于一些有一定能力的朋友,可能更喜欢自己去下载一
- 模块:包含定义函数和变量的python文件,可以被别的程序引入。os模块是操作系统接口模块,提供了一些方便使用操作系统相关功能函数,这里介绍