Qt 数据库学习记录

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就是很有必要的了。

时间: 2024-10-08 14:21:28

Qt 数据库学习记录的相关文章

数据库学习记录-数据创建、更新与删除

创建数据库SPJ,创建四个关系模式S,P,J,SPJ; 创建表 插入元素 --创建S(供应商)表 create table S( ????SNO VARCHAR(8), ????SNAME VARCHAR(8), ????STATUS INTEGER, ????CITY VARCHAR(8)); --插入元素 insert into S values ????('S1','精益','20','天津') ????('S2','盛锡','10','北京'), ????('S3','东方红','30'

数据库学习记录

1.数据库中的exec命令,可以用来执行存储过程,可以把存储过程理解为定义在sql server数据库中的函数,而exec就是去执行该定义的函数,既然是函数,那么定义时就有一下几种类型 1)无参数无返回值的 2)有参数无返回值的 3)无参数有返回值的 3)有参数有返回值的 下面举几个简单的例子,供简单理解 (1  无参数 create procedure sp_latvia_sys_role    --创建一个存储过程,其中sp_latvia_sys_role是创建的存储过程名称 as  --作

程序员面试笔试宝典学习记录(三)(数据库相关知识)

关系数据库系统与文件数据库系统的区别如下: (a)关系数据库系统的主要特征是数据的结构化,而文件数据库系统是数据的非结构化. (b)关系数据库系统中,用户看到的逻辑结构是二维表,而文件数据库系统中,基本元素是文件. (c)文件数据库系统可以实现多媒体文件管理,支持C/S工作模式. acid,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability). 数据查询:select sele

python学习记录第四篇--数据库

只要用到MySQLdb,使用时请先安装MySQLdb,百度上可以下载! #coding=utf-8'''@author: 使用python操作MySQL数据库'''import MySQLdb#import MySQLdb.cursorsconn=MySQLdb.connect(user='root',passwd='root') #connect共三个值,user,passwd,host,无密码且连接本地数据库时,可以都为空.cur=conn.cursor() #创建游标,使用游标进行数据库操

前端小白之每天学习记录----php(2)数据库操作软件

数据库 存储数据的仓库(软件)(DBA:Database Administrator)数据库管理员mysqlsqlserveroracle...... 数据库软件架构 C(client)->S(server)用户<--->服务器 eg:腾讯qq, 金山杀毒软件,wps, office... B(Browser)->S(server)浏览器<-->服务器 eg:所有从浏览器打开的网站(应用) 存储数据的软件(我们用wps的表格来举例) wps           数据库

【转】Qt数据库总结

转自:http://blog.chinaunix.net/uid-25201977-id-3014100.html #include <QtSql>QT += sql QSqlDatabase类实现了数据库连接的操作QSqlQuery类用来执行SQL语句QSqlRecord类 封装数据库所有记录 第一:QSqlDatabase类QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");  采用QSQLITE数据库,QMYS

mysql数据库学习目录

前面的话 对于前端工程师来说,数据库并不是主要技能点,但是基本的增删改查操作还是需要了解的.小火柴将mysql数据库的学习记录整理如下 目录  前端学数据库之基础操作 前端学数据库之数据类型 前端学数据库之数据表操作 前端学数据库之记录操作 前端学数据库之中文乱码 前端学数据库之子查询 前端学数据库之多表操作 前端学数据库之函数 前端学数据库之存储

Qt数据库sqlite总结

QSqlDatabase类实现了数据库连接的操作QSqlQuery类用来执行SQL语句QSqlRecord类封装数据库所有记录QSqlRelationalTableModelQSqlQueryModelQSqlTableModel 第一:QSqlDatabase类 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");  采用QSQLITE数据库 db.setHostName("localhost"); //设

ios学习记录 day41 UI17 多线程

CPU(工厂) 进程(车间) 线程(工人) 一个进程代表一个应用程序 CPU总是运行一个进程,其它进程处于非运行状态.一个进程可以包含多个线程.线程与线程之间可以共享进程的内存区域. 打开一个应用程序,系统会给我们创建一个线程,称为主线程 管理主界面的UI与内部循环机制(与界面相关的东西必须放在主线程中!!!) 压力比较大且会造成线程阻塞(界面卡),因此我们通过创建子线程来对主线程进行分压. 什么时候用多线程 1.网络请求(同步的) 2.文件读写(少) 3.大数据计算(冒泡) 4.数据库sele