您的位置:首页 > 编程语言 > Qt开发

Qt 数据库学习记录

2015-03-30 13:35 239 查看
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就是很有必要的了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息