qt数据库操作

时间:2022-09-08 10:57:13

先来看看qt支持的数据库类型:

Driver Type Description

QDB2

IBM DB2

QIBASE

Borland InterBase Driver

QMYSQL

MySQL Driver

QOCI

Oracle Call Interface Driver

QODBC

ODBC Driver (includes Microsoft SQL Server)

QPSQL

PostgreSQL Driver

QSQLITE

SQLite version 3 or above

QSQLITE2

SQLite version 2

QTDS

Sybase Adaptive Server

下面主要说明使用QODBC和QSQLITE的使用方法:


一:QODBC

QODBC使用windows系统自带的ODBC数据源来连接服务器上的数据库,具体配置方法,网上资料很多,我就不废话了。

我配置的ODBC名字为test1,ip地址设为本机地址。

那么QT对ODBC的支持设置为:

在项目文件中添加:

QT+=sql

在需要使用数据库的文件中添加头文件:

#include <Qtsql>
然后定义一个:
QSqlDatabase db;
语法代码为:
    db = QSqlDatabase::addDatabase("QODBC","test1");
//连接ODBC中名为test1的数据源
 QString dsn = QString::fromLocal8Bit( "DRIVER={SQL SERVER};SERVER=127.0.0.1;DATABASE=DataMon");
    db.setDatabaseName( dsn );
//设置驱动方式,服务器地址(我的为本机地址,所以设为回环地址),默认数据库名称
    if( !db.open( ) )// 打开ODBC
 {
 QMessageBox::critical(0,QLabel::trUtf8("数据库连接失败"),db.lastError().text());
 return false;
 }
 QSqlQuery qurey(db);// 执行sql语句
 bool succes=qurey.exec("SELECT distinct Farm_ID FROM Cage_Table");
 if( succes )
 {
 while(qurey.next())
         {
             qDebug()<<qurey.value(0).toInt();// 输出查询数据
             。。。。
          }
     }
至此结束
当然这些都是一些很基本的语句,其他还有很多方式可以设置数据库
二、QSQLITE3
同样的,
     dbconnet = QSqlDatabase::addDatabase("QSQLITE");
}
/*
  SystemSettingLastRecord       :       访问Operation_Record 库中System_Setting表的最后一条记录
  textlist                      :       保存数据库中Text类型数据,数据返回
  */
void dataBaseConnect::SystemSettingLastRecord(QStringList *textlist)
{
    dbconnet.setDatabaseName("Operation_Record");
    if( dbconnet.open() )
    {
        qDebug()<<"succes";
    }
    else
        qDebug()<<"failed";
//    QStringList tablelist = dbconnet.tables(QSql::Tables);
    QSqlQuery query;//(dbconnet);
    bool ok = query.exec("select * from System_Setting order by R_ID desc limit 0,1;");
//    qDebug()<<ok<<"ok?"<<tablelist;
    /*
数据类型integertext        texttexttext        integerintegerDATETIME
列名R_IDUsername    PortCage_ChooseOrder_Text  Send_IntervalHex_SRRecord_Time
    */
    while( query.next() )
    {
        *textlist<<query.value(1).toString();//Username
        *textlist<<query.value(2).toString();//Port
        *textlist<<query.value(3).toString();//Cage_Choose
        *textlist<<query.value(4).toString();//Order
        *textlist<<query.value(5).toString();//Send_Interval
        *textlist<<query.value(6).toString();//Hex_SR
    }
    dbconnet.close();