修复了数据库

This commit is contained in:
www-git-cn 2024-03-05 14:13:41 +08:00
parent 308969700c
commit af565e360a
4 changed files with 82 additions and 22 deletions

View File

@ -86,7 +86,7 @@ bool DataBase::insertUsr(QString name, QString pwd)
//根据name查找用户 //根据name查找用户
bool DataBase::findUsr(QString name) bool DataBase::findUsr(QString name)
{ {
QString sql = QString("select from table_usr where name = :name;"); QString sql = QString("select * from table_usr where name = :name;");
//打开数据库 //打开数据库
if(!db_.open()) if(!db_.open())
{ {
@ -175,24 +175,25 @@ bool DataBase::match(QString name, QString pwd)
void DataBase::insertCode(QString name, QString code, QString number) void DataBase::insertCode(QString name, QString code, QString number)
{ {
QString sql = QString("update table_usr set code=:code, number=:number where name=:name"); //QString sql = QString("update table_usr set code = :code, number = :number where name = :name");
QString sql = QString("update table_usr set code = '%1', number = '%2' where name = '%3'")
.arg(code).arg(number).arg(name);
// 1.打开数据 // 1.打开数据
if (!db_.open()) if (!db_.open())
{ {
qDebug() << "open:" << db_.lastError().text(); qDebug() << "insercode:" << db_.lastError().text();
} }
// 2.执行sql // 2.执行sql
QSqlQuery query(db_); QSqlQuery query(db_);
query.prepare(sql); query.prepare(sql);
query.bindValue(":code",QVariant(code)); /*query.bindValue(":code",QVariant(code));
query.bindValue(":number",QVariant(number)); query.bindValue(":number",QVariant(number));
query.bindValue(":name",QVariant(name)); query.bindValue(":name",QVariant(name));*/
if (!query.exec(sql)) if (!query.exec(sql))
{ {
qDebug() << "insert:" << query.lastError().text(); qDebug() << "update:" << query.lastError().text();
} }
//关闭数据库 //关闭数据库
@ -235,7 +236,7 @@ QString DataBase::matchCode(QString name, QString code)
void DataBase::resetCode(QString name) void DataBase::resetCode(QString name)
{ {
QString sql = QString("update table_usr set code=:code, number=:number where name=:name"); QString sql = QString("update table_usr set code = '000', number = '000' where name = '%1'").arg(name);
// 1.打开数据 // 1.打开数据
if (!db_.open()) if (!db_.open())
@ -246,9 +247,9 @@ void DataBase::resetCode(QString name)
// 2.执行sql // 2.执行sql
QSqlQuery query(db_); QSqlQuery query(db_);
query.prepare(sql); query.prepare(sql);
query.bindValue(":code",QVariant("000")); /*query.bindValue(":code",QVariant("000"));
query.bindValue(":number",QVariant("000")); query.bindValue(":number",QVariant("000"));
query.bindValue(":name",QVariant(name)); query.bindValue(":name",QVariant(name));*/
if (!query.exec(sql)) if (!query.exec(sql))
{ {
@ -257,3 +258,34 @@ void DataBase::resetCode(QString name)
} }
QString DataBase::findCode(QString name)
{
QString sql = QString("select * from table_usr where name = :name;");
QString code = "000";
//打开数据库
if(!db_.open())
{
qDebug() << "open fail" << db_.lastError().text();
exit(-1);
}
//执行插入操作
QSqlQuery query(db_);
query.prepare(sql);
query.bindValue(":name",QVariant(name));
query.exec();
//查询成功
if(query.next())
{
if(code == query.value(2).toString()) //获取取车码
{
return code;
}
}
db_.close();
return code;
}

View File

@ -17,6 +17,8 @@ public:
//根据name查找用户 //根据name查找用户
bool findUsr(QString name); bool findUsr(QString name);
QString findCode(QString name);
//匹配name和pwd //匹配name和pwd
bool match(QString name, QString pwd); bool match(QString name, QString pwd);

View File

@ -51,6 +51,7 @@ void DataManager::recv_from_cln(QByteArray &data, QTcpSocket *sock)
QString code = json_data["data"].toString(); QString code = json_data["data"].toString();
QString number = p_this->database->matchCode(name,code); QString number = p_this->database->matchCode(name,code);
QString find_code = p_this->linedb->findCode(number); QString find_code = p_this->linedb->findCode(number);
qDebug() << "取车时的number和linecode" << number << find_code;
p_this->linedb->resetState(number); p_this->linedb->resetState(number);
QByteArray data_build, data_encrypt; QByteArray data_build, data_encrypt;
data_build = p_this->protocol->data_maker(Protocol::CODE, QString("pick"), QString("server"),find_code); data_build = p_this->protocol->data_maker(Protocol::CODE, QString("pick"), QString("server"),find_code);
@ -63,9 +64,11 @@ void DataManager::recv_from_cln(QByteArray &data, QTcpSocket *sock)
{ {
QString name = json_data["user"].toString(); QString name = json_data["user"].toString();
QString number = p_this->linedb->choose(); //获取一个可用的车位编号 QString number = p_this->linedb->choose(); //获取一个可用的车位编号
qDebug() << "获取到的可用车位编号是" << number;
//随机生成取车码 //随机生成取车码
QString code = p_this->getRandomString(8); QString code = p_this->getRandomString(8);
//更新取车码 //更新取车码
qDebug() << name << code << number;
p_this->database->insertCode(name,code,number); p_this->database->insertCode(name,code,number);
p_this->linedb->setState(number); p_this->linedb->setState(number);
@ -76,6 +79,17 @@ void DataManager::recv_from_cln(QByteArray &data, QTcpSocket *sock)
p_this->server->sendToclient(sock, data_encrypt); p_this->server->sendToclient(sock, data_encrypt);
} }
else if(json_data["action"] == "update")
{
//登陆后自动获取取车码信息
QString name = json_data["user"].toString();
QString code = p_this->database->findCode(name);
QByteArray data_build, data_encrypt;
data_build = p_this->protocol->data_maker(Protocol::CODE, QString("update"), QString("server"),code);
qDebug() << data_build;
data_encrypt = p_this->protocol->data_encrypt(data_build);
p_this->server->sendToclient(sock, data_encrypt);
}
} }
else if (json_data["type"] == "request") else if (json_data["type"] == "request")
{ {

View File

@ -17,17 +17,15 @@ Line::Line()
{ {
//1.加载数据库驱动 //1.加载数据库驱动
db_ = QSqlDatabase::addDatabase("QSQLITE", "linesql"); db_ = QSqlDatabase::addDatabase("QSQLITE", "linesql");
qDebug () << db_.connectionName();//打印连接名称
//2.设置数据库名 //2.设置数据库名
db_.setDatabaseName("line.db"); db_.setDatabaseName("line.db");
qDebug () << db_.databaseName();
} }
//3.打开数据库 //3.打开数据库
if(db_.open()) if(db_.open())
{ {
qDebug() << "open success"; qDebug() << "linedb open success";
} }
else else
{ {
@ -35,7 +33,7 @@ Line::Line()
return; return;
} }
QString sql = "create table if not exists table_line(number varchar(10) primary key,state varchar(3));"; QString sql = "create table if not exists table_line(number varchar(10) primary key,linecode varchar(20),state varchar(3))";
QSqlQuery query(db_); QSqlQuery query(db_);
if (query.exec(sql)) if (query.exec(sql))
@ -44,8 +42,9 @@ Line::Line()
} }
//测试用 //测试用
sql = QString("insert into table_line values('%1', '%2')") sql = QString("insert into table_line values('%1', '%2', '%3')")
.arg('2') .arg('3')
.arg("000")
.arg("000"); .arg("000");
query.exec(sql); query.exec(sql);
db_.close(); db_.close();
@ -53,7 +52,7 @@ Line::Line()
QString Line::findCode(QString number) QString Line::findCode(QString number)
{ {
QString sql = QString("select from table_line where name = :name;"); QString sql = QString("select * from table_line where number = :number");
//打开数据库 //打开数据库
if(!db_.open()) if(!db_.open())
{ {
@ -84,37 +83,50 @@ QString Line::findCode(QString number)
QString Line::choose() QString Line::choose()
{ {
QString sql = QString("select from table_line where state = :state limit 1;"); if(!db_.open())
{
qDebug() << "choose:" << db_.lastError().text();
}
QString sql = QString("select * from table_line where state = '%1' limit 1").arg("000");
QSqlQuery query(db_); QSqlQuery query(db_);
query.prepare(sql); query.prepare(sql);
query.bindValue(":state",QVariant("000")); //选择未占用的车位 //query.bindValue(":state",QVariant("000")); //选择未占用的车位
query.exec(); query.exec();
if(query.next()) if(query.next())
{ {
QString number = query.value(0).toString(); QString number = query.value(0).toString();
qDebug() << number << "序号";
db_.close();
return number; return number;
} }
qDebug() << "choose:" << db_.lastError().text();
return "000"; return "000";
} }
void Line::setState(QString number) void Line::setState(QString number)
{ {
db_.open();
QString sql = QString("update table_line set state = :state where number = :number"); QString sql = QString("update table_line set state = :state where number = :number");
QSqlQuery query(db_); QSqlQuery query(db_);
query.prepare(sql); query.prepare(sql);
query.bindValue(":number",QVariant(number)); query.bindValue(":number",QVariant(number));
query.bindValue(":state",QVariant("111")); //已占用的话为111 query.bindValue(":state",QVariant("111")); //已占用的话为111
query.exec(); query.exec();
db_.close();
} }
void Line::resetState(QString number) void Line::resetState(QString number)
{ {
db_.open();
QString sql = QString("update table_line set state = :state where number = :number"); QString sql = QString("update table_line set state = :state where number = :number");
QSqlQuery query(db_); QSqlQuery query(db_);
query.prepare(sql); query.prepare(sql);
query.bindValue(":number",QVariant(number)); query.bindValue(":number",QVariant(number));
query.bindValue(":state",QVariant("000")); //状态初始值为000 query.bindValue(":state",QVariant("000")); //状态初始值为000
query.exec(); query.exec();
db_.close();
} }