Qt编程,TCP编程、数据库

目录

[1、TCP: QTcpServer | QTcpSocket](#1、TCP: QTcpServer | QTcpSocket)

1、 ##TCP客户端

1、//连接成功信号

2、//连接断连信号

[3、 //数据就绪信号](#3、 //数据就绪信号)

[4、 //连接到服务器,使用服务器的IP地址和端口](#4、 //连接到服务器,使用服务器的IP地址和端口)

5、//发送数据到服务器

6、//从服务器接收数据

2、##TCP服务器端

1、//创建TCP服务器对象

2、//新连接信号

3、//断连的信号

[4、 //接收数据就绪信号](#4、 //接收数据就绪信号)

5、//发送数据到客户端

[2、SQLITE 数据库编程](#2、SQLITE 数据库编程)

1、//创建表

2、//数据插入方式1

[3、 //查询数据](#3、 //查询数据)

[4、 //修改数据](#4、 //修改数据)

5、//删除数据

1、TCP: QTcpServer | QTcpSocket

1、 ##TCP客户端

socket = new QTcpSocket(this);

1、//连接成功信号

connect(socket, &QTcpSocket::connected, [=](){

ui->pb_connect->setText("断开连接");

ui->pb_send->setEnabled(true);

});

2、//连接断连信号

connect(socket, &QTcpSocket::disconnected, [=](){

ui->pb_connect->setText("连接");

ui->pb_send->setEnabled(false);

});

3、 //数据就绪信号

connect(socket, &QTcpSocket::readyRead, [=](){

QByteArray data = socket->readAll();

//QString tmp = ui->te_receive->toPlainText();

ui->te_receive->append(QString::fromLocal8Bit(data));

});

4、 //连接到服务器,使用服务器的IP地址和端口

socket->connectToHost(QHostAddress(ip), port.toUShort());

5、//发送数据到服务器

if (socket->write(ui->te_send->toPlainText().toLocal8Bit()) == -1) //使用toLocal8Bit可以支持中文

{

qDebug() << "客户端发送数据失败";

}

else

{

qDebug() << "客户端发送数据成功";

}

6、//从服务器接收数据

QByteArray data = socket->readAll();

ui->te_receive->append(QString::fromLocal8Bit(data)); //使用fromLocal8Bit可以支持中文

2、##TCP服务器端

1、//创建TCP服务器对象

server = new QTcpServer(this);

//设置监听的IP地址和端口

server->listen(QHostAddress::AnyIPv4, 8888);

2、//新连接信号

connect(server, &QTcpServer::newConnection, [=](){

if (server->hasPendingConnections())//如果有待处理的新连接

{

socket = server->nextPendingConnection();//处理新连接, 获得通信套接字,以后双方的通信基于此套接字,每个新连接会产生一个新的通信套接字

}

3、//断连的信号

connect(socket, &QTcpSocket::disconnected, [=](){

ui->pb_send->setEnabled(false);

});

4、 //接收数据就绪信号

connect(socket, &QTcpSocket::readyRead, [=](){

//读取接收到的数据

QByteArray data = socket->readAll();

ui->te_receive->append(QString::fromLocal8Bit(data));

});

});

5、//发送数据到客户端

if (socket->write(ui->te_send->toPlainText().toLocal8Bit()) == -1)

{

qDebug() << "服务器发送数据失败";

}

else

{

qDebug() << "服务器发送数据成功";

}

2、SQLITE 数据库编程

qmake: QT += sql

使用到的类:

QSqlDatabase //数据库连接

QSqlQuery //数据SQL语句执行

//创建SQLITE数据库连接

QSqlDatabase db_student = QSqlDatabase::addDatabase("QSQLITE");//使用SQLITE数据库

//设置数据库的文件名

db_student.setDatabaseName(db_file_name);

//打开数据库

if (!db_student.open())

{

qDebug() << "打开数据库失败1";

}

//关闭数据库

db_student.close();

//使用当前的数据库连接 执行SQL操作

QSqlQuery query(db_student);

1、//创建表

QString queryStr = "create table Student (id varchar(64) PRIMARY KEY, name varchar(64), gender varchar(64), age int)";

if (!query.exec(queryStr))

{

qDebug() << "创建数据库表失败";

qDebug() << query.lastError().text();

}

2、//数据插入方式1

queryStr = "insert into Student values('2309250001', '张三', '男', 13)";

if (!query.exec(queryStr))

{

qDebug() << "插入数据失败";

qDebug() << query.lastError().text();

}

//数据插入方式2

queryStr = "insert into Student values(?,?,?,?)";

query.prepare(queryStr);

query.addBindValue("2309250002");

query.addBindValue("李四");

query.addBindValue("男");

query.addBindValue(12);

if (!query.exec())

{

qDebug() << "插入数据失败2";

qDebug() << query.lastError().text();

}

//数据插入方式3

QString queryStr = "insert into Student values(:id,:name,:gender,:age)";

query.prepare(queryStr);

query.bindValue(":id", ui->le_id->text());

query.bindValue(":name", ui->le_name->text());

query.bindValue(":gender", ui->cbb_gender->currentText());

query.bindValue(":age", ui->le_age->text().toInt());

if (!query.exec())

{

qDebug() << "execute " << queryStr << " failed";

qDebug() << query.lastError().text();

}

3、 //查询数据

QString queryStr = "select * from Student";

if (!query.exec(queryStr))

{

qDebug() << "execute " << queryStr << " failed";

qDebug() << query.lastError().text();

}

QString queryStr = "select * from Student where id = :id";

query.prepare(queryStr);

query.bindValue(":id", ui->le_id->text());

if (!query.exec())

{

qDebug() << "execute " << queryStr << " failed";

qDebug() << query.lastError().text();

}

while (query.next())

{

ui->le_name->setText(query.value(1).toString());

ui->cbb_gender->setCurrentText(query.value(2).toString());

ui->le_age->setText(query.value(3).toString());

}

4、 //修改数据

QString queryStr = "update Student set name=?, gender=?,age=? where id=?";

query.prepare(queryStr);

query.addBindValue(ui->le_name->text());

query.addBindValue(ui->cbb_gender->currentText());

query.addBindValue(ui->le_age->text());

query.addBindValue(ui->le_id->text());

if (!query.exec())

{

qDebug() << "execute " << queryStr << " failed";

qDebug() << query.lastError().text();

}

5、//删除数据

QString queryStr = "delete from Student where id = :id";

query.prepare(queryStr);

query.bindValue(":id", ui->le_id->text());

if (!query.exec())

{

qDebug() << "execute " << queryStr << " failed";

qDebug() << query.lastError().text();

}

相关推荐
曳渔8 分钟前
UDP/TCP套接字编程简单实战指南
java·开发语言·网络·网络协议·tcp/ip·udp
手把手入门2 小时前
★CentOS:MySQL数据备份
数据库·mysql·adb
SelectDB3 小时前
5000+ 中大型企业首选的 Doris,在稳定性的提升上究竟花了多大的功夫?
大数据·数据库·apache
路多辛3 小时前
Golang database/sql 包深度解析(二):连接池实现原理
数据库·sql·golang
SimonKing3 小时前
Mybatis批量插入,形式不同性能也不同
数据库·后端·程序员
杰克尼4 小时前
MYSQL-175. 组合两个表
数据库·mysql
DemonAvenger4 小时前
MySQL索引原理深度解析与优化策略实战
数据库·mysql·性能优化
.Shu.4 小时前
计算机网络 TCP、UDP 区别
tcp/ip·计算机网络·udp
189228048615 小时前
NY270NY273美光固态闪存NY277NY287
服务器·网络·数据库·科技·性能优化
谱写秋天5 小时前
Qt 5.5 的安装与配置(使用 VSCode编辑)
开发语言·vscode·qt