当前位置:Gxlcms > 数据库问题 > Qt连接数据库的两种方法

Qt连接数据库的两种方法

时间:2021-07-01 10:21:17 帮助过:5人阅读

<QSqlError> #include <QPluginLoader> #include <QDebug>

先写个loadPlugin函数来检测Qt 有没编译好的ODBC驱动,在 /Users/Hula/Qt/5.11.2/clang_64/plugins/sqldrivers/libqsqlodbc.dylib 对应填上你自己的Qt安装文件路径,代码如下:

void HDbm::loadPlugin()
{
    QPluginLoader loader;
    // ODBC 驱动插件的路径
    loader.setFileName("/Users/Hula/Qt/5.11.2/clang_64/plugins/sqldrivers/libqsqlodbc.dylib");
    qDebug() << loader.load();
    qDebug() << loader.errorString();
}

简单的写个数据库连接函数:

int HDbm::createSQLServerConnection()
{
    loadPlugin();

    QString strHost = "10.211.55.4";
    int port = 3306;
    QString strDbName = "SQLData";
    QString strUserName = "test";
    QString strUserPwd = "123321";
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    QString strconn = QString("Driver={sql server};SERVER=%1;PORT=%2;DATABASE=%3;UID=%4;PWD=%5;")
                          .arg(strHost)
                          .arg(port)
                          .arg(strDbName)
                          .arg(strUserName)
                          .arg(strUserPwd);
    db.setDatabaseName(strconn);
    if (!db.open())
    {
        qDebug() <<"error_SqlServer:" << db.lastError().text();
        return 1201;
    }

    return 0;
}

调用createSQLServerConnection函数即可。
如果出现以下错误:

The shared library was not found.
QSqlDatabase: QODBC driver not loaded ((null):0, (null))

表示Qt没有 libqsqlodbc 驱动,需要自己动手编译Qt的源码,具体方法自动上网搜索。

使用Qt的QSqlDriver 数据库驱动连接数据库

首先安装MySQL Connector/C,MySQL官网上没有此安装文件,有两种方法来完成,一是用 brew 安装 MySQL,brew 将 MySQL 安装在 usr?/?local?/?lib/mysql 目录下,由于Qt 调用 ?usr?/?local?/?lib? 下的 MySQL 驱动,因此将 usr?/?local?/?lib/mysql 目录下的驱动文件 libmysqlclient.dylib 链接到 usr?/?local?/?lib 目录下即可。


或从 https://dev.mysql.com/downloads/mysql/ 下载MySQL Community Server的压缩包,解压后,拷贝 lib 目录中文件到 usr?/?local?/?lib 下即可。

同上,MySQL数据库连接函数:

int HDbm::createMySQLConnection()
{
    loadPlugin();

    QString strHost = "10.211.55.4";
    int port = 3306;
    QString strDbName = "SQLData";
    QString strUserName = "test";
    QString strUserPwd = "123321";
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    // 防止连接超时无反应,设置连接超时3秒
    db.setConnectOptions("MYSQL_OPT_CONNECT_TIMEOUT=3");
    db.setHostName(strHost);
    db.setPort(port);
    db.setDatabaseName(strDbName);
    db.setUserName(strUserName);
    db.setPassword(strUserPwd);
    if (!db.open())
    {
        qDebug() <<"error_SqlServer:" << db.lastError().text();
        return 1201;
    }

    return 0;
}
三、补充说明

在Qt的文档中对QSqlDatabase这个类的描述如下:

The QSqlDatabase class handles a connection to a database.
The QSqlDatabase class provides an interface for accessing a database through a connection. An instance of QSqlDatabase represents the connection. The connection provides access to the database via one of the supported database drivers, which are derived from QSqlDriver. Alternatively, you can subclass your own database driver from QSqlDriver. See How to Write Your Own Database Driver for more information.

如果你使用的数据库不在上表Qt当前支持的驱动类型中,你可以从QSqlDriver类构建你自己的数据库驱动。有两种方法,一是找到数据库厂商的 for ODBC dirver,如果没有,也可以通过数据库厂商的 for C/C++ dirver 自己封装一个 for ODBC dirver,通过 ODBC 访问数据库;再就是从QSqlDriver类构建一个的数据库驱动,来调用数据库厂商的 for C dirver,更为方便简单。

另,ODBC不同数据库连接字符串:

access 
"Driver={microsoft access driver(*.mdb)};dbq=*.mdb;uid=admin;pwd=pass;"

dBase
 "Driver={microsoft dbase driver(*.dbf)};driverid=277;dbq=***;"

oracle 
"Driver={microsoft odbc for oracle};server=oraclesever.world;uid=admin;pwd=pass;"

MSSQL server 
"Driver={sql server};server=servername;database=dbname;uid=sa;pwd=pass;"

MS text 
"Driver={microsoft text driver(*.txt; *.csv)};dbq=**;extensions=asc,csv,tab,txt;Persist SecurityInfo=false;"

Visual Foxpro
 "Driver={microsoft Visual Foxpro driver};sourcetype=DBC;sourceDB=*.dbc;Exclusive=No;"

MySQL 
"Driver={mysql};database=yourdatabase;uid=username;pwd=yourpassword;option=16386;"

SQLite 
"Driver={SQLite3 ODBC Driver};Database=D:\SQLite\*.db"

PostgreSQL 
"Driver={PostgreSQL ANSI};server=127.0.0.1;uid=admin;pwd=pass;database=databaseName"

 

Qt连接数据库的两种方法

标签:不用   api   存储   png   sqli   调试   txt   行数据   err   

人气教程排行