先来看看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
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";}
elseqDebug()<<"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();