データベース接続の確立、追加、削除、変更、チェックを行うQTの例

以下は主にmysqlデータベースに対する操作ですが、他のデータベース操作も実際には同様です。

 

1.以下に示すように、QT + = sqlを.proファイルに追加します。



2.SQL関連のヘッダーファイルを追加します

#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>

3.データベースに接続します

    qDebug()<<QSqlDatabase::drivers();    //查询支持的sql对象,下面调用的数据库实例QMYSQL就是从这里的结果确定的

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //数据库对象

    //连接数据库
    db.setHostName("192.168.0.1");            //数据库服务器IP
    db.setPort(3306);                        //端口
    db.setUserName("test");                 //数据库用户名
    db.setPassword("123456");               //数据库密码
    db.setDatabaseName("test");              //使用哪个数据库

    if( !db.open() ){       //数据库打开失败
        QMessageBox::warning(this,"错误",db.lastError().text());
        return;
    }

4.データのクエリ
見つかったデータをテーブルウィジェットに配置します。これは直感的に見えます。

    QStringList headerText;
    headerText<<"权限"<<"姓名"<<"密码";
    ui->tableWidget->setColumnCount(headerText.count());

    for(int i = 0;i<headerText.count();i++)
    {
        ui->tableWidget->setHorizontalHeaderItem(i,new QTableWidgetItem(headerText.at(i)));
    }

    QSqlQuery query;    //查询语句
    query.exec("select * from user;");

    qint32 rowNo = 0;

    while(query.next())
    {
        QTableWidgetItem *item;
        QStandardItem *sItem;

        qDebug()<<query.value(0).toString()<<":"<<query.value(1).toString()<<":"<<query.value(2).toString()<<":"<<query.value(3).toString();
        ui->tableWidget->insertRow(rowNo);

        for(int i=0;i<3;i++)
        {
             item = new  QTableWidgetItem(query.value(i+1).toString(),i);
             ui->tableWidget->setItem(rowNo,i,item);
        }
        rowNo++;
    }

クエリ結果を確認できます。




5.新しいデータ
QSqlQueryのqueryメソッドを呼び出すだけです。クエリエラーの場合は、lastError関数を使用して、コマンドが失敗した理由を読み取ることができます。

    QSqlQuery query;

    QString sqls = QString("insert into user values(%1,%2,%3,%4);")
            .arg(11).arg(2).arg("'test1'").arg("'test1'");

    qDebug()<<sqls;

    if(query.exec(sqls))
    {
        qDebug()<<"成功";
    }
    else
    {
        qDebug()<<"失败";
        qDebug()<<query.lastError();
    }

6.データを削除します

    QSqlQuery query;

    //删除ID=11的用户
    QString sqls = QString("delete from user where id = %1").arg(11);

    qDebug()<<sqls;

    if(query.exec(sqls))
    {
        qDebug()<<"成功";
    }
    else
    {
        qDebug()<<"失败";
        qDebug()<<query.lastError();
    }

7.データを変更します

     QString sqls = QString("update user set username = %1 where id = %1;")
             .arg("'user1'").arg(10);

    qDebug()<<sqls;

    if(query.exec(sqls))
    {
        qDebug()<<"成功";
    }
    else
    {
        qDebug()<<"失败";
        qDebug()<<query.lastError();
    }

テーブル操作などの他の操作はすべてSQLの入力とスプライシングの問題であるため、これ以上は説明しません。

8. QtがMySQLに接続すると、「QSqlDatabase:QMYSQLドライバーがロードされていません」というプロンプトが表示されます。これはライブラリファイルlibmysql.dllがない可能性があります。このファイルはmsyqlインストールディレクトリから見つけて、下のbinディレクトリに配置できます。以下のQTインストールディレクトリのコンパイラディレクトリ(「C:\ Qt \ Qt5.9.0 \ 5.9 \ mingw53_32 \ bin」など)
これでも機能しない場合は、インストールされているmysqlの桁がQTの桁と同じかどうかを確認してください。そうでない場合は、次のアドレスに移動し
ます。https://dev.mysql .com / downloads / connector / c /
mysql-connector-cをダウンロードし、libディレクトリでファイル「libmysql.dll」を見つけて、このファイルをQtにコピーします。 binディレクトリでQtCreatorを再起動すると、正しく実行されます。
つまり、プログラム実行環境下のlibmysql.dllファイルに対応するmysqlビット番号がQTビット番号と同じであることを確認してください。

おすすめ

転載: blog.csdn.net/zhangfls/article/details/114279217