国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

qt連接tcp通信和連接數(shù)據(jù)庫

這篇具有很好參考價(jià)值的文章主要介紹了qt連接tcp通信和連接數(shù)據(jù)庫。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

通過數(shù)據(jù)庫實(shí)現(xiàn)學(xué)生管理系統(tǒng)

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //判斷數(shù)據(jù)庫對(duì)象是否包含了自己使用的數(shù)據(jù)庫  Studemt.db
    if(!db.contains("Student.db"))
    {
        //添加一個(gè)數(shù)據(jù)庫
        db = QSqlDatabase::addDatabase("QSQLITE");                   //表示使用的是sqlite3版本的數(shù)據(jù)庫

        //給數(shù)據(jù)庫命名
        db.setDatabaseName("Student.db");
    }

    //打開數(shù)據(jù)庫
    if(!db.open())
    {
        QMessageBox::information(this,"提示","數(shù)據(jù)庫打開失敗");
        return;
    }

    //此時(shí)說明數(shù)據(jù)庫創(chuàng)建完畢并打開
    //就可以創(chuàng)建數(shù)據(jù)表了
    //需要使用SQL語句,需要使用QSQLQuerry類對(duì)象完成
    //準(zhǔn)備SQL語句
    QString sql = "create table if not exists myTable("              //創(chuàng)建表的sql語句
                    "id integer primary key autoincrement,"          //id主鍵,允許自增
                    "numb integer,"                                  //學(xué)號(hào),是整形
                    "name varchar(10),"                              //姓名   字符串
                    "score integer,"
                    "sex varchar(4))";                                //性別 字符串

    //定義語句執(zhí)行者
    QSqlQuery querry;

    //使用queery執(zhí)行SQL語句
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"失敗","創(chuàng)建表失敗");
    }else
    {
        QMessageBox::information(this,"成功","創(chuàng)建表成功");
    }
}


Widget::~Widget()
{
    delete ui;
}

//錄入按鈕對(duì)應(yīng)的槽函數(shù)
void Widget::on_btn1_clicked()
{
    //獲取ui界面中要存入數(shù)據(jù)庫中的數(shù)據(jù)
    int numb_ui = ui->edit1->text().toInt();            //獲取學(xué)號(hào)
    QString name_ui = ui->edit2->text();                //獲取姓名
    int score_ui = ui->edit3->text().toInt();           //獲取分?jǐn)?shù)
    QString sex_ui = ui->edit4->text();                 //獲取性別

    if(numb_ui == 0 || name_ui.isEmpty() || score_ui == 0||sex_ui.isEmpty())
    {
        QMessageBox::information(this,"提示","請(qǐng)將信息填充完整");
        return ;
    }

    //準(zhǔn)備SQL語句
    QString sql = QString("insert into myTable(numb,name,score,sex)"
                  "values(%1,'%2',%3,'%4')")
            .arg(numb_ui).arg(name_ui).arg(score_ui).arg(sex_ui);

    //定義語句執(zhí)行官
    QSqlQuery querry;

    //調(diào)用執(zhí)行者的相關(guān)函數(shù)執(zhí)行SQL語句
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"失敗","插入失敗");
    }else
    {
        QMessageBox::information(this,"成功","插入成功");
    }
}

//展示按鈕對(duì)應(yīng)的槽函數(shù)
void Widget::on_btn2_clicked()
{
    //準(zhǔn)備SQL語句
    QString sql = "select * from myTable";

    //準(zhǔn)備語句執(zhí)行者
    QSqlQuery querry;
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"失敗","查找失敗");
        return;
    }

    //此時(shí)將查找的所有結(jié)果全都都放在querry對(duì)象中
    //可以通過next函數(shù)不斷遍歷查詢結(jié)果
    int i = 0;                           //記錄行號(hào)
    while(querry.next())
    {
        //遍歷任意一組記錄,querry.record
           //querry.record();

        //要找到每條一條記錄 中的每個(gè)數(shù)據(jù)使用
           //qDebug() << querry.record().value(2);

        //返回當(dāng)前記錄對(duì)應(yīng)數(shù)據(jù)項(xiàng)的個(gè)數(shù)
           //querry.record().count();

        //將記錄的某一項(xiàng)的數(shù)據(jù)轉(zhuǎn)變成了字符串
           //querry.record().value(2).toString();

        //將數(shù)據(jù)庫中的表格展示到ui界面
           //ui->tableWidget->setItem();

        for(int j = 0; j<querry.record().count()-1; j++)
        {
            ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
        }
        i++;                             //進(jìn)行下一行
    }
}

//查找按鈕
void Widget::on_btn3_clicked()
{
    //獲取ui界面中要存入數(shù)據(jù)庫中的數(shù)據(jù)
    int numb_ui = ui->edit1->text().toInt();            //獲取學(xué)號(hào)
    QString name_ui = ui->edit2->text();                //獲取姓名
    int score_ui = ui->edit3->text().toInt();           //獲取分?jǐn)?shù)
    QString sex_ui = ui->edit4->text();                 //獲取性別

    if(numb_ui != 0)
    {
        ui->tableWidget->clear();
        //準(zhǔn)備SQL語句
        QString sql = QString("select * from myTable where %1 == numb").arg(numb_ui);

        //準(zhǔn)備語句執(zhí)行者
        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失敗","查找失敗");
            return;
        }

        int i = 0;                           //記錄行號(hào)
        while(querry.next())
        {
            for(int j = 0; j<querry.record().count()-1; j++)
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
            }
            i++;                             //進(jìn)行下一行
        }

    }else if(!name_ui.isEmpty())
    {
        ui->tableWidget->clear();
        //準(zhǔn)備SQL語句
        QString sql = QString("select * from myTable where '%2' == name").arg(name_ui);

        //準(zhǔn)備語句執(zhí)行者
        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失敗","查找失敗");
            return;
        }

        int i = 0;                           //記錄行號(hào)
        while(querry.next())
        {
            for(int j = 0; j<querry.record().count()-1; j++)
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
            }
            i++;                             //進(jìn)行下一行
        }

    }else if(score_ui != 0)
    {
        ui->tableWidget->clear();
        //準(zhǔn)備SQL語句
        QString sql = QString("select * from myTable where %3 == score").arg(score_ui);

        //準(zhǔn)備語句執(zhí)行者
        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失敗","查找失敗");
            return;
        }

        int i = 0;                           //記錄行號(hào)
        while(querry.next())
        {
            for(int j = 0; j<querry.record().count()-1; j++)
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
            }
            i++;                             //進(jìn)行下一行
        }
    }else if(!sex_ui.isEmpty())
    {
        ui->tableWidget->clear();
        //準(zhǔn)備SQL語句
        QString sql = QString("select * from myTable where '%4' == sex").arg(sex_ui);

        //準(zhǔn)備語句執(zhí)行者
        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失敗","查找失敗");
            return;
        }

        int i = 0;                           //記錄行號(hào)
        while(querry.next())
        {
            for(int j = 0; j<querry.record().count()-1; j++)
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
            }
            i++;                             //進(jìn)行下一行
        }
    }
}

//刪除按鈕
void Widget::on_btn4_clicked()
{
    //獲取ui界面中要存入數(shù)據(jù)庫中的數(shù)據(jù)
    int numb_ui = ui->edit1->text().toInt();            //獲取學(xué)號(hào)
    QString name_ui = ui->edit2->text();                //獲取姓名
    int score_ui = ui->edit3->text().toInt();           //獲取分?jǐn)?shù)
    QString sex_ui = ui->edit4->text();                 //獲取性別

    if(numb_ui != 0 )
    {
        ui->tableWidget->clear();
        //準(zhǔn)備SQL語句
        QString sql = QString("delete from myTable where %1 == numb").arg(numb_ui);

        //準(zhǔn)備語句執(zhí)行者
        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失敗","刪除失敗");
            return;
        }
        else
        {
             QMessageBox::information(this,"成功","刪除成功");
        }

        //準(zhǔn)備SQL語句
        QString sql1 = "select * from myTable";
        querry.exec(sql1);
        int i = 0;                           //記錄行號(hào)
        while(querry.next())
        {
            for(int j = 0; j<querry.record().count()-1; j++)
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
            }
            i++;                             //進(jìn)行下一行
        }
    }else if(!name_ui.isEmpty())
    {
        ui->tableWidget->clear();
        //準(zhǔn)備SQL語句
        QString sql = QString("delete from myTable where '%2' == name").arg(name_ui);

        //準(zhǔn)備語句執(zhí)行者
        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失敗","刪除失敗");
            return;
        }
        else
        {
             QMessageBox::information(this,"成功","刪除成功");
        }

        int i = 0;                           //記錄行號(hào)
        while(querry.next())
        {
            for(int j = 0; j<querry.record().count()-1; j++)
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
            }
            i++;                             //進(jìn)行下一行
        }

    }else if(score_ui != 0)
    {
        ui->tableWidget->clear();
        //準(zhǔn)備SQL語句
        QString sql = QString("delete from myTable where %3 == score").arg(score_ui);

        //準(zhǔn)備語句執(zhí)行者
        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失敗","刪除失敗");
            return;
        }
        else
        {
             QMessageBox::information(this,"成功","刪除成功");
        }
        int i = 0;                           //記錄行號(hào)
        while(querry.next())
        {
            for(int j = 0; j<querry.record().count()-1; j++)
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
            }
            i++;                             //進(jìn)行下一行
        }
    }else if(!sex_ui.isEmpty())
    {
        ui->tableWidget->clear();
        //準(zhǔn)備SQL語句
        QString sql = QString("delete from myTable where '%4' == sex").arg(sex_ui);

        //準(zhǔn)備語句執(zhí)行者
        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失敗","刪除失敗");
            return;
        }
        else
        {
             QMessageBox::information(this,"成功","刪除成功");
        }

        int i = 0;                           //記錄行號(hào)
        while(querry.next())
        {
            for(int j = 0; j<querry.record().count()-1; j++)
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
            }
            i++;                             //進(jìn)行下一行
        }
    }

}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QSqlDatabase>                         //數(shù)據(jù)庫管理類
#include<QSqlQuery>                            //執(zhí)行SQL語句對(duì)應(yīng)的類
#include<QSqlRecord>                           //記錄類
#include<QMessageBox>
#include<QDebug>



QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_btn1_clicked();

    void on_btn2_clicked();

    void on_btn3_clicked();

    void on_btn4_clicked();

private:
    Ui::Widget *ui;

    //定義一個(gè)數(shù)據(jù)庫對(duì)象
    QSqlDatabase db;
};
#endif // WIDGET_H

?qt連接tcp通信和連接數(shù)據(jù)庫,qt,數(shù)據(jù)庫,開發(fā)語言

qt連接tcp通信和連接數(shù)據(jù)庫,qt,數(shù)據(jù)庫,開發(fā)語言

qt連接tcp通信和連接數(shù)據(jù)庫,qt,數(shù)據(jù)庫,開發(fā)語言

?tcp服務(wù)器

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //給服務(wù)器指針實(shí)例化對(duì)象
    server = new QTcpServer(this);
}

Widget::~Widget()
{
    delete ui;
}

//啟動(dòng)服務(wù)器按鈕對(duì)應(yīng)的槽函數(shù)
void Widget::on_btn_clicked()
{

    //獲取ui界面上的端口號(hào)
    quint16 port = ui->edit->text().toUInt();


    if(!server->listen(QHostAddress::Any,port))
    {
        QMessageBox::critical(this,"失敗","服務(wù)器啟動(dòng)失敗");
        return;
    }else
    {
        QMessageBox::information(this,"成功","服務(wù)器啟動(dòng)成功");
    }
    connect(server,&QTcpServer::newConnection,this,&Widget::newConnection_slot);
}

//處理的newConnection信號(hào)的槽函數(shù)的實(shí)現(xiàn)
void Widget::newConnection_slot()
{
    qDebug() << "有新的客戶端發(fā)來連接請(qǐng)求";
    QTcpSocket *s = server->nextPendingConnection();
    //將獲取的套接字存放到客戶端容器中
    clientList.push_back(s);
    connect(s,&QTcpSocket::readyRead,this,&Widget::redyRead_slot);
}

//關(guān)于readyRead信號(hào)的槽函數(shù)
void Widget::redyRead_slot()
{
    //刪除客戶端鏈表中的無效客戶端套接字
    for(int i=0;i<clientList.count();i++)
    {
        if(clientList[i]->state() == 0)
        {
            clientList.removeAt(i);               // 將下標(biāo)為i的客戶端移除掉
        }
    }

    //遍歷所有客戶端,查看是哪個(gè)客戶端發(fā)來數(shù)據(jù)
    for(int i=0;i<clientList.count();i++)
    {

        if(clientList[i]->bytesAvailable() != 0)
        {
            QByteArray msg = clientList[i]->readAll();
            //將數(shù)據(jù)展示到ui界面上
            ui->msglist->addItem(QString::fromLocal8Bit(msg));
            //接接受的消息發(fā)送到所有客戶端,發(fā)送給所有客戶端
            for(int j=0;j<clientList.count();j++)
            {
                clientList[j]->write(msg);
            }
        }
    }
}

tcp客戶端

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //客戶端指針實(shí)例化空間
    socket = new QTcpSocket(this);

    connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);

    connect(socket,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);

    connect(socket,&QTcpSocket::disconnected,this,&Widget::disconnected_slot);
}

Widget::~Widget()
{
    delete ui;
}

//連接服務(wù)器按鈕對(duì)應(yīng)的槽函數(shù)
void Widget::on_btn2_clicked()
{
    //獲取ui界面的信息
    userName = ui->edit2->text();                       //獲取用戶名
    QString hostName = ui->edit3->text();               //獲取主機(jī)地址
    quint16 port= ui->edit4->text().toUInt();           //獲取端口號(hào)

    socket->connectToHost(hostName,port);

}


void Widget::connected_slot()
{
    QMessageBox::information(this,"成功","連接服務(wù)器成功");

    //順便向服務(wù)器發(fā)送一條信息
    QString msg = userName + ":進(jìn)入聊天室";

    socket->write(msg.toLocal8Bit());
}

//關(guān)于readyRead信號(hào)的槽函數(shù)
void Widget::readyRead_slot()
{
    //讀取該客戶端中的數(shù)據(jù)
    QByteArray msg = socket->readAll();

    //將數(shù)據(jù)展示在ui界面
    ui->listWidget->addItem(QString::fromLocal8Bit(msg));
}

//發(fā)送消息
void Widget::on_btn1_clicked()
{
    //獲取ui界面中編輯文本的內(nèi)容
    QString m = ui->edit1->text();

    //整合要發(fā)送的信息
    QString msg = userName + ":" + m;

    //將消息發(fā)送給服務(wù)器
    socket->write(msg.toLocal8Bit());

    //將消息編輯框中的內(nèi)容清空
    ui->edit1->clear();
}

//斷開服務(wù)器
void Widget::on_btn3_clicked()
{
    //準(zhǔn)備要發(fā)送的信息
    QString msg = userName + ":離開聊天室";
    socket->write(msg.toLocal8Bit());


    socket->disconnectFromHost();

}


void Widget::disconnected_slot()
{
    QMessageBox::information(this,"退出","退出成功");
}

qt連接tcp通信和連接數(shù)據(jù)庫,qt,數(shù)據(jù)庫,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-694605.html

到了這里,關(guān)于qt連接tcp通信和連接數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Qt通過ODBC連接openGauss數(shù)據(jù)庫

    Qt通過ODBC連接openGauss數(shù)據(jù)庫

    本文就介紹了Qt通過ODBC連接opengauss數(shù)據(jù)庫的基礎(chǔ)內(nèi)容。 在.pro文件中添加一行引入 添加如下測(cè)試代碼 說明成功連接openGauss數(shù)據(jù)庫 什么是ODBC ODBC(Open Database Connectivity,開放數(shù)據(jù)庫互連)是由Microsoft公司基于X/OPEN CLI提出的用于訪問數(shù)據(jù)庫的應(yīng)用程序編程接口。應(yīng)用程序通過O

    2024年02月05日
    瀏覽(22)
  • QT連接Mysql數(shù)據(jù)庫(詳細(xì)成功版)

    QT連接Mysql數(shù)據(jù)庫(詳細(xì)成功版)

    QT連接Mysql數(shù)據(jù)庫步驟相對(duì)比較麻煩,因此寫了篇文章將詳細(xì)過程呈現(xiàn)給大家,歡迎大家來評(píng)論區(qū)指導(dǎo)提問。 示例代碼: (1)在.pro文件中添加下列代碼: (2)在mainwindow.h文件中添加下列頭文件: ?(3)在main.cpp文件中添加下列代碼: 運(yùn)行代碼,如果連接Mysql成功則輸出下面

    2024年01月16日
    瀏覽(29)
  • 使用QT連接access數(shù)據(jù)庫詳解(清晰、透徹)

    使用QT連接access數(shù)據(jù)庫詳解(清晰、透徹)

    第一步、查看我們自己電腦上access數(shù)據(jù)庫驅(qū)動(dòng)是32位的還是64位的,查看方法:通過odbc數(shù)據(jù)源管理器進(jìn)行查看,odbc數(shù)據(jù)源管理器分為32位和64位: 32位odbc數(shù)據(jù)源管理器查看如下:注意是syswow64文件夾中 ?下面圖片證明:access數(shù)據(jù)庫驅(qū)動(dòng)是32位的: ?我們也可以打開64位的odbc數(shù)據(jù)

    2024年02月06日
    瀏覽(29)
  • Qt連接MySQL數(shù)據(jù)庫最詳細(xì)的教程

    Qt連接MySQL數(shù)據(jù)庫最詳細(xì)的教程

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 原文鏈接:https://blog.csdn.net/joey_ro/article/details/105411135 被Qt連接數(shù)據(jù)庫折磨了三天之后終于連接成功了,記錄一下希望對(duì)看到的人有所幫助。 當(dāng)然要在.pro文件中添加一行引入 如果顯示: 那么恭喜你太幸

    2024年01月21日
    瀏覽(34)
  • QT實(shí)現(xiàn)連接MySQL數(shù)據(jù)庫以及查詢等操作

    QT實(shí)現(xiàn)連接MySQL數(shù)據(jù)庫以及查詢等操作

    功能包含數(shù)據(jù)庫的增刪改查和界面的顯示,因?yàn)闆]有用.ui文件所以控件的位置都是手動(dòng)設(shè)置的,寫的有點(diǎn)費(fèi)勁 首先打開Navicat,新建一個(gè)名字為bak_db的數(shù)據(jù)庫,然后新建查詢導(dǎo)入下面的sql語句: 然后刷新顯示表已經(jīng)創(chuàng)建好了,接下來就開始進(jìn)行操作了: 文件結(jié)構(gòu) 源碼在我的

    2024年02月04日
    瀏覽(30)
  • Qt連接MySQL數(shù)據(jù)庫(保姆級(jí)成功版教程)

    Qt連接MySQL數(shù)據(jù)庫(保姆級(jí)成功版教程)

    VIP通道可以關(guān)注我,私信我,直接給兩個(gè)動(dòng)態(tài)庫,直接起飛。 1、安裝Qt時(shí)勾選sources 2、配置path環(huán)境變量 ① 此電腦-屬性-高級(jí)系統(tǒng)設(shè)置-環(huán)境變量 ② 雙擊path-右上角新建 ③把這兩個(gè)路徑添加進(jìn)去,最后確定 3、編譯mysql驅(qū)動(dòng)(在Qt打開mysql.pro文件) 1)在這條路徑中D:QT5.14.25.1

    2024年02月04日
    瀏覽(21)
  • QT mysql 驅(qū)動(dòng)-數(shù)據(jù)庫安裝以及qt連接ssl報(bào)錯(cuò)問題

    QT mysql 驅(qū)動(dòng)-數(shù)據(jù)庫安裝以及qt連接ssl報(bào)錯(cuò)問題

    文章末尾是引用筆記 配置MySQL8.0 環(huán)境變量 如果不配置MySQL環(huán)境變量,就不能在命令行直接輸入MySQL登錄命令。下面說如何配置MySQL的環(huán)境變量: 步驟1:在桌面上右擊【此電腦】圖標(biāo),在彈出的快捷菜單中選擇【屬性】菜單命令。 步驟2:打開【系統(tǒng)】窗口,單擊【高級(jí)系統(tǒng)設(shè)

    2024年01月20日
    瀏覽(27)
  • 如何實(shí)現(xiàn)無公網(wǎng)ip固定TCP端口地址遠(yuǎn)程連接Oracle數(shù)據(jù)庫

    如何實(shí)現(xiàn)無公網(wǎng)ip固定TCP端口地址遠(yuǎn)程連接Oracle數(shù)據(jù)庫

    Oracle,是甲骨文公司的一款關(guān)系數(shù)據(jù)庫管理系統(tǒng),它在數(shù)據(jù)庫領(lǐng)域一直處于領(lǐng)先地位??梢哉fOracle數(shù)據(jù)庫系統(tǒng)是世界上流行的關(guān)系數(shù)據(jù)庫管理系統(tǒng),系統(tǒng)可移植性好、使用方便、功能強(qiáng),適用于各類大、中、小微機(jī)環(huán)境。它是一種高效率的、可靠性好的、適應(yīng)高吞吐量的數(shù)據(jù)

    2024年01月18日
    瀏覽(29)
  • QT連接MySql數(shù)據(jù)庫失敗,編譯驅(qū)動(dòng)問題,最詳細(xì)解決辦法

    QT連接MySql數(shù)據(jù)庫失敗,編譯驅(qū)動(dòng)問題,最詳細(xì)解決辦法

    各位讀者你們好?? 此篇是本專欄的第一篇,本專欄專門收錄在學(xué)習(xí)過程中遇到的環(huán)境配置、軟件問題等開發(fā)環(huán)境方面的問題。?????? 剛剛轉(zhuǎn)陰就迫不及待的趕緊寫一篇博客來解決一直落下的一個(gè)問題: 關(guān)于QT和MySql數(shù)據(jù)庫的連接問題??(在本人經(jīng)過整整三天的無限踩坑之

    2024年02月05日
    瀏覽(16)
  • openGauss學(xué)習(xí)筆記-100 openGauss 數(shù)據(jù)庫管理-管理數(shù)據(jù)庫安全-客戶端接入之用SSL進(jìn)行安全的TCP/IP連接

    openGauss學(xué)習(xí)筆記-100 openGauss 數(shù)據(jù)庫管理-管理數(shù)據(jù)庫安全-客戶端接入之用SSL進(jìn)行安全的TCP/IP連接

    100.1 背景信息 openGauss支持SSL標(biāo)準(zhǔn)協(xié)議(TLS 1.2),SSL協(xié)議是安全性更高的協(xié)議標(biāo)準(zhǔn),它們加入了數(shù)字簽名和數(shù)字證書來實(shí)現(xiàn)客戶端和服務(wù)器的雙向身份驗(yàn)證,保證了通信雙方更加安全的數(shù)據(jù)傳輸。 100.2 前提條件 從CA認(rèn)證中心申請(qǐng)到正式的服務(wù)器、客戶端的證書和密鑰。(假設(shè)

    2024年02月05日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包