qt数据库操作

来源:互联网 发布:ubuntu 14.04 pyqt4 编辑:程序博客网 时间:2024/05/18 08:05

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

Driver TypeDescription

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