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();

}

相关推荐
IvorySQL3 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·3 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德3 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫4 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i4 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.4 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn4 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露5 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
冰暮流星5 小时前
sql语言之分组语句group by
java·数据库·sql
符哥20085 小时前
Ubuntu 常用指令集大全(附实操实例)
数据库·ubuntu·postgresql