修复了数据库

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查找用户
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())
{
@ -175,24 +175,25 @@ bool DataBase::match(QString name, QString pwd)
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.打开数据
if (!db_.open())
{
qDebug() << "open:" << db_.lastError().text();
qDebug() << "insercode:" << db_.lastError().text();
}
// 2.执行sql
QSqlQuery query(db_);
query.prepare(sql);
query.bindValue(":code",QVariant(code));
/*query.bindValue(":code",QVariant(code));
query.bindValue(":number",QVariant(number));
query.bindValue(":name",QVariant(name));
query.bindValue(":name",QVariant(name));*/
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)
{
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.打开数据
if (!db_.open())
@ -246,9 +247,9 @@ void DataBase::resetCode(QString name)
// 2.执行sql
QSqlQuery query(db_);
query.prepare(sql);
query.bindValue(":code",QVariant("000"));
/*query.bindValue(":code",QVariant("000"));
query.bindValue(":number",QVariant("000"));
query.bindValue(":name",QVariant(name));
query.bindValue(":name",QVariant(name));*/
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查找用户
bool findUsr(QString name);
QString findCode(QString name);
//匹配name和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 number = p_this->database->matchCode(name,code);
QString find_code = p_this->linedb->findCode(number);
qDebug() << "取车时的number和linecode" << number << find_code;
p_this->linedb->resetState(number);
QByteArray data_build, data_encrypt;
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 number = p_this->linedb->choose(); //获取一个可用的车位编号
qDebug() << "获取到的可用车位编号是" << number;
//随机生成取车码
QString code = p_this->getRandomString(8);
//更新取车码
qDebug() << name << code << number;
p_this->database->insertCode(name,code,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);
}
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")
{

View File

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