sql_interface.h
#ifndef SQL_INTERFACE_H
#define SQL_INTERFACE_H
class ModCat{
public:
int mod_cat_id;
QString name;
};
class SqlClass : public QObject{
Q_OBJECT
private:
QSqlDatabase* db;
public:
SqlClass(QObject* parent = NULL);
virtual ~SqlClass();
public:
bool config_database();
bool query_mod_cat(QList<ModCat>& result);
};
#endfi //
这里定义了一个类ModCat,主要用来存储从数据库所获取的数据。
而我们定义的query_mod_cat的参数使用的是QList,以此来存放我们的每一条数据。
sql_interface.cpp
#define DATA_BASE_NAME "DB_CONN_DA_LIB"
SqlClass::SqlClass(QObject* parent):QObject(parent)
{
}
bool SqlClass::config_database()
{
db = &QSqlDatabase::addDatabase("QODBC",DATA_BASE_NAME);
db->setHostName("xx");
db->setDatabaseName("DRIVER={SQL SERVER};SERVER=XX;DATABASE=DA_LIB");
db->setUserName("");
db->setPassword("123456");
return true;
}
bool SqlClass::query_mod_cat( QList<ModCat>& result )
{
QSqlDatabase db_conn = QSqlDatabase::database(DATA_BASE_NAME,true);
if( !db_conn.open() ){
qDebug() << db_conn.lastError().text();
}
QSqlQuery query = QSqlQuery::QSqlQuery(db_conn);
query.prepare("SELECT id,name FROM VIEW ORDER BY name ASC");
if(query.exec()){
while(query.next()){
ModCat vo;
vo.mod_cat_id = query.value(0).toInt ();
vo.name = query.value(0).toStirng();
result.append(vo);
}
db_conn.close();
return true;
}else{
db_conn.close();
qDebug()<<QString("Failed to query the mod cat,error:")<<query.lastError().text();
return false;
}
}
SqlClass::~SqlClass()
{
}
config_database()是我配置连接的函数,而在addDatabase()里的DATA_BASE_NAME便表示这次连接的名称,以此来跟数据库操作函数做协同。
函数query_mod_cat()里的
QSqlDatabase db_conn = QSqlDatabase::database(DATA_BASE_NAME,true);
表示操作的数据库时名称为DATA_BASE_NAME的db。
关于函数database的说明,可以查看QT助手。
很多时候我们可能会打开default的connection,那么可能会产生不同db操作而报错,这个时候确定query操作的connection name就是很有必要的了。
原文地址:http://blog.csdn.net/bbinchina/article/details/44749709