新建表,增删改查 登录 注册 删除 查询 显示数据库的表
关于增删改查的SQL语句在写代码的时候,一点点都不能写错!!!SQL语句写错了编译不会报错,但是运行就会有问题
新建表
#include "widget.h"
#include "ui_widget.h"
#include <QDialog>
#include <QMessageBox>
#include <QCryptographicHash>
//---------------表的头文件
#include <QApplication>
#include <QTableView>
#include <QHeaderView>
#include <QStandardItemModel>
#include <QTableWidget>
#include <QSqlQueryModel>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//创建一个库的流程
//1.添加驱动.将数据库的名字传进去
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
//2.指定一个数据库文件的路径,就相当于新建一个文件夹,里面去存放东西
db.setDatabaseName("user.db");
//3.打开数据库
//系统将user自动传入,返回一个布尔类型 打开成功返回true
//判断打开是否成功
if(!db.open()) //如果打开不成功
{
qDebug()<<"数据库打开失败";
}
//创建表格
//先定义 访问的类
QSqlQuery query;
//创建一个叫user的表,一共有三个字段
//(id ---------主键 自动增加(primary key),username----账号 不可以重复也不能为空(unique not null),password------密码(不为空))
//引号里面是sql语句的固定格式 user是自定义的表名
//integer 整数
//ntext 字符串
//unique not null 唯一并且不为空
//exec返回值为布尔型,创建成功为true
if(!query.exec("create table if not exists user(id integer primary key autoincrement,username ntext unique not NULL,password ntext not NULL)"))
{
qDebug()<<"创建表格失败!";
}
}
Widget::~Widget()
{
delete ui;
}
数据表的增加
注册用户
//注册 表格的插入操作
void Widget::on_pushButton_clicked()
{
//先获取用户输入的账号和密码
QString username = ui->ZHEdit->text();
QString password = ui->MMEdit->text();
//数据加密(加密完成后再加入数据库)
//创建一个MD5加密的对象
QCryptographicHash hash(QCryptographicHash::Md5);
//放入原始数据--------------------
hash.addData(password.toUtf8());
//取出加密后的数据
QByteArray arr = hash.result();
//重新复制给passwor
password = arr.toHex();
//看一下加密后的数据
qDebug()<<password;
//插入表格
//写出sql插入语句
QString sql = QString("insert into user(username,password) values('%1','%2')").arg(username).arg(password);
QSqlQuery query;
//query.exec(sql);
if(query.exec(sql))
{
//如果返回值为true
qDebug()<<"恭喜你,注册成功";
//设置消息对话框
int ret = QMessageBox::information(this,"注册","恭喜你,注册成功",QMessageBox::Ok,QMessageBox::Close);
if (ret == QMessageBox::Ok)
qDebug()<<"已退出注册成功窗口";
}
else
{
qDebug()<<"error!账号已被注册!";
int ret = QMessageBox::information(this,"注册","error!账号已被注册!",QMessageBox::Ok,QMessageBox::Close);
if (ret == QMessageBox::Ok)
qDebug()<<"已退出注册窗口";
}
}
表格的查询
//登录 表格的查询
void Widget::on_pushButton_2_clicked()
{
//先获取用户输入的账号和密码
QString username = ui->ZHEdit->text();
QString password = ui->MMEdit->text();
//数据加密(加密完成后再加入数据库)--------------------------------------------------
//创建一个MD5加密的对象
QCryptographicHash hash(QCryptographicHash::Md5);
//放入原始数据
hash.addData(password.toUtf8());
//取出加密后的数据
QByteArray arr = hash.result();
//重新复制给passwor
password = arr.toHex();
//看一下加密后的数据
qDebug()<<password;
//---------------------------------------------------------------------------------
//在表格中进行查找
//写出sql的查找语句
QString sql = QString("select * from user where username='%1' and password='%2'").arg(username).arg(password);
QSqlQuery query(sql);//自动执行
//发返回值判断
if(query.next())
{
//设置消息对话框
int ret = QMessageBox::information(this,"登录","恭喜你,登录成功",QMessageBox::Ok,QMessageBox::Close);
if (ret == QMessageBox::Ok)
qDebug()<<"已退出登录成功窗口";
//如果返回值为true
qDebug()<<"登录成功";
}
else
{
//设置消息对话框
int ret = QMessageBox::information(this,"注册","账号密码不一致,或账号未注册",QMessageBox::Ok,QMessageBox::Close);
if (ret == QMessageBox::Ok)
qDebug()<<"已退出登录成功窗口";
qDebug()<<"账号密码不一致,或账号未注册";
}
}
根据输入的条件查询
//查找
void Widget::on_pushButton_4_clicked()
{
QString chazhaousername = ui->chazhaoEdit->text();
QString sql = QString("SELECT * FROM user WHERE username=%1;").arg(chazhaousername);
QSqlQuery query(sql);//自动执行
if(query.next())
{
QString id = query.value(0).toString();
QString username = query.value(1).toString();
QString password = query.value(2).toString();
qDebug()<<id<<username<<password;
//设置消息对话框
QMessageBox::information(this,"查找",QString("您输入的账户存在,编号为'%1'").arg(id),QMessageBox::Ok,QMessageBox::Close);
}
else
{
//设置消息对话框
QMessageBox::information(this,"查找","您输入的账户不存在",QMessageBox::Ok,QMessageBox::Close);
}
}
表的删除
//删除
void Widget::on_pushButton_3_clicked()
{
QString del = ui->shanchuEdit->text();
//-------------%1这里不要加''单引号,因为del就是一个字符串,本身就是带单引号的,要是外面再加一层单引号的话,格式就不对了
QString sql = QString("DELETE FROM user WHERE username=%1").arg(del);
QSqlQuery query;//自动执行
if(query.exec(sql))
{
//设置消息对话框
QMessageBox::information(this,"删除","删除成功",QMessageBox::Ok,QMessageBox::Close);
}
else
{
//设置消息对话框
QMessageBox::information(this,"删除","删除失败",QMessageBox::Ok,QMessageBox::Close);
}
}
修改
//修改账号
void Widget::on_pushButton_6_clicked()
{
QString oldusername = ui->oldid->text();
QString newusername = ui->newid->text();
QString newpassword = ui->newpassword->text();
//数据加密(加密完成后再加入数据库)--------------------------------------------------
//创建一个MD5加密的对象
QCryptographicHash hash(QCryptographicHash::Md5);
//放入原始数据
hash.addData(newpassword.toUtf8());
//取出加密后的数据
QByteArray arr = hash.result();
//重新复制给passwor
newpassword = arr.toHex();
QString sql = QString("update user set username='%1',password='%2' where username='%3'").arg(newusername).arg(newpassword).arg(oldusername);
//QString sql = QString("update user set username='%1 where username='%3'").arg(newusername).arg(oldusername);
QSqlQuery query;//自动执行
if(query.exec(sql))
// QSqlQuery query(sql);//自动执行
// if(query.next())
{
//设置消息对话框
QMessageBox::information(this,"修改",QString("修改成功"),QMessageBox::Ok,QMessageBox::Close);
}
else
{
//设置消息对话框
QMessageBox::information(this,"修改","修改失败",QMessageBox::Ok,QMessageBox::Close);
}
}
显示所有注册用户的信息
//显示所有注册用户的信息
void Widget::on_pushButton_5_clicked()
{
// QSqlQuery query;
// int row =0;
// //int columns = 0;
// //初始化行数
// QString sql = QString("select count(*) as row from user");
// query.exec(sql);
// if(query.first())
// {
// row = query.value("row").toInt();
// ui->tableWidget->setRowCount(row);
// }
// //初始化列数(mysql中存在一个information_schema这个数据库,存放各个表的信息)
// ui->tableWidget->setColumnCount(2);//列
// ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"id"<<"username"); //设置行头
// QString sql1 = QString("SELECT * FROM user");
// QSqlQuery query1(sql1);//自动执行
// for(int i =0;query1.next();i++)
// {
// QString id = query.value(0).toString();
// QString username = query.value(1).toString();
// qDebug()<<id<<username;
// ui->tableWidget->setItem(i,0,new QTableWidgetItem(id)); //设置表格内容
// ui->tableWidget->setItem(i,1,new QTableWidgetItem(username)); //设置表格内容
// }
static QSqlQueryModel *mode= new QSqlQueryModel(ui->tableView);
mode->setQuery("select * from user");
mode->setHeaderData(0,Qt::Horizontal,tr("id"));//设置表头
mode->setHeaderData(1, Qt::Horizontal, tr("username"));
ui->tableView->setModel(mode);
}
涉及到一个数据模型
注释掉的内容是另一种显示方法