QT 数据库编程四
//vmysql.cpp
#include "vmysql.h" #include <QMessageBox> Vmysql::Vmysql()
{
mysql_init(&mysql1);
connection=NULL;
memset(errorbuf,,sizeof(errorbuf));
} Vmysql::~Vmysql()
{
} /*连接数据库*/
int Vmysql::sql_connect(const char *hostname, const char *username, const char *passwd, const char *dbname)
{
if(hostname==NULL||username==NULL||passwd==NULL||dbname==NULL)
{
memset(errorbuf,,sizeof(errorbuf));
strcpy(errorbuf,"sql_connect() 参数不可以为空!");
/*这里没有父窗口,所以第一个参数为0*/
//QMessageBox::critical(0,"错误信息","sql_connect() 参数不可以为空!");
return -;
}
connection=mysql_real_connect(&mysql1,hostname,username,passwd,dbname,,,);
if(connection==NULL)
{
memset(errorbuf,,sizeof(errorbuf));
strcpy(errorbuf,mysql_error(&mysql1));
//QMessageBox::critical(0,"错误信息",mysql_error(&mysql1));
return -;
}
/*连接成功,设置字符集*/
if(mysql_query(connection,"SET NAMES utf8")!=)
{
memset(errorbuf,,sizeof(errorbuf));
strcpy(errorbuf,mysql_error(&mysql1));
return -;
}
return ;
} /*断开数据库连接*/
void Vmysql::sql_disconnect()
{
if(connection)
{
mysql_close(connection);
connection=NULL;
}
} /*执行SQL更新*/
int Vmysql::sql_exec(const char *strsql)
{
if(strsql==NULL)
{
memset(errorbuf,,sizeof(errorbuf));
strcpy(errorbuf,"sql_exec() 参数不可以为空!");
return -;
}
if(mysql_query(connection,strsql)!=)
{
memset(errorbuf,,sizeof(errorbuf));
strcpy(errorbuf,mysql_error(&mysql1));
return -;
}
return ;
} /*执行SQL查询*/
int Vmysql::sql_query(const char *strsql,QStandardItemModel **model)
{
if(strsql==NULL||model==NULL)
{
memset(errorbuf,,sizeof(errorbuf));
strcpy(errorbuf,"sql_query() 参数不可以为空!");
return -;
}
if(mysql_query(connection,strsql)!=)
{
memset(errorbuf,,sizeof(errorbuf));
strcpy(errorbuf,mysql_error(&mysql1));
return -;
}
/*获取结果集*/
MYSQL_RES *result=mysql_store_result(connection);
/*mysql_affected_rows(connection);返回当前数据集有多少行
* mysql_field_count(connection);返回当前数据集有多少列*/
/*特别注意:mysql_affected_rows()或者mysql_field_count()方法必须在mysql_store_result()之后使用*/
int rowcount = mysql_affected_rows(connection);
int fieldcount=mysql_field_count(connection);
if(result==NULL)
{
memset(errorbuf,,sizeof(errorbuf));
strcpy(errorbuf,mysql_error(&mysql1));
return -;
}
/*创建返回model*/
/*创建一个rowcount行fieldcount列的model数据集;
* 根据SQL语句返回的行列总数,动态的创建model*/
QStandardItemModel *tmodel=new QStandardItemModel(rowcount,fieldcount);
/*创建列数据*/
MYSQL_FIELD *field=NULL;
for(int i=;i<fieldcount;i++)
{
field=mysql_fetch_field(result);
/*设置第i列的列名,第一个参数是指第几列,第二个参数是个固定参数,第三个参数是列名*/
tmodel->setHeaderData(i,Qt::Horizontal,field->name);
}
/*创建单元格数据*/
MYSQL_ROW row=NULL;
for(int i=;i<rowcount;i++)
{
row=mysql_fetch_row(result);
for(int j=;j<fieldcount;j++)
{
/*设置model每个单元格的数据*/
/*model->index(0,0,QModelIndex()),index()函数第一个参数表示第几行,第二个参数表示第几列,第三参数是固定写法*/
tmodel->setData(tmodel->index(i,j,QModelIndex()),row[j]);
}
}
*model=tmodel;
/*释放mysql_store_result()函数分配的内存空间*/
mysql_free_result(result);
return ;
} /*错误信息*/
const char *Vmysql::ger_error()
{
return this->errorbuf;
}
QT 数据库编程四的更多相关文章
- Qt数据库编程1
Qt中数据编程主要分为以下两点:1.利用qt提供类 访问数据库或者成为简单的数据库编程2.数据库编程中引入model/view编程模型 qt中数据库编程的步骤: 1.加载数据库驱动 QSqlDatab ...
- QT 数据库编程三
//mainwindow.cpp #include "mainwindow.h" #include "logindlg.h" #include "sc ...
- Qt——数据库编程
一.概述 Qt提供了一个类似JDBC的数据库接口,需要为每个可以连接的特定数据库提供驱动程序,可以通过 QStringList QSqlDatabase::drivers() 知道当前版本的Qt哪些驱 ...
- Qt数据库编程_基本
QtSql模块提供了一个平台无关且数据库无关的访问SQL数据库的接口. Qt中的每个数据库连接用一个QSqlDatabase对象来表示:Qt使用不同driver来和各种不同数据库的API进行通讯. Q ...
- QT 数据库编程二
//logindlg.cpp #include "logindlg.h" #include <QGridLayout> #include <QHBoxLayout ...
- QT基于model/view数据库编程2
Qt中数据编程主要分为以下两点:1.利用qt提供类 访问数据库或者成为简单的数据库编程2.数据库编程中引入model/view编程模型 基于model/view数据库编程: qt提供model类: Q ...
- python 闯关之路四(下)(并发编程与数据库编程) 并发编程重点
python 闯关之路四(下)(并发编程与数据库编程) 并发编程重点: 1 2 3 4 5 6 7 并发编程:线程.进程.队列.IO多路模型 操作系统工作原理介绍.线程.进程演化史.特点.区别 ...
- python-网络安全编程第四天(数据库编程&网络编程)
前言 好几天没更因为寒假放假回家放松了几天 嘿嘿 今天继续开始启动学习模式. python数据库编程 Python DB API访问数据库流程 Python DB API包含的内容 什么是 PyMyS ...
- c++学习书籍推荐《C++ GUI Qt 4编程(第2版)》下载
下载地址:点我 百度云及其他网盘下载地址:点我 编辑推荐 <C++ GUI Qt 4编程(第2版)>讲授的大量Qt4编程原理和实践,都可以轻易将其应用于Qt4.4.Qt4.5及后续版本的Q ...
随机推荐
- JAVA中的枚举小结
枚举 将一组有限集合创建为一种新的类型,集合里面的值可以作为程序组件使用: 枚举基本特性 以下代码是枚举的简单使用: 使用values方法返回enum实例的数组 使用ordinal方法返回每个enum ...
- mysql regexp用法
正则表达式作用是匹配方本,将一个模式(正则表达式)与一个文本串进行比较. MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定用正则表达式过滤SELECT检索出的数据. MySQL仅支持 ...
- SQL Server中的锁的简单学习
简介 在SQL Server中,每一个查询都会找到最短路径实现自己的目标.如果数据库只接受一个连接一次只执行一个查询.那么查询当然是要多快好省的完成工作.但对于大多数数据库来说是需要同时处理多个查询的 ...
- SQLServer基本函数
1.字符串函数 长度与分析用 datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格 substring(expression,start,length) 取子串 ri ...
- Kafka 分布式的,基于发布/订阅的消息系统
Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能. 高吞吐量:即使是非常 ...
- spring Quartz 调度
Quartz 是开源任务调度框架中的翘首,它提供了强大任务调度机制,同时保持了使用的简单性.Quartz 允许开发人员灵活地定义触发器的调度时间表,并可以对触发器和任务进行关联映射.此外,Quartz ...
- 【JSP】JSP基础学习记录(一)—— 基础介绍以及3个编译指令
序: 从实现到现在一直是以.net为主,但偶尔也会参与一些其他语言的项目.最近需要对一个Java Web项目进行二次开发,一直没学习过JSP所以买了几本书自学试试.参考资料为<轻量级Java E ...
- JDK7学习笔记之基础类型
printf()的基础用法: 变量的基础用法: 字符的输出:
- 创建docker镜像,初始化jdk8与tomcat环境
一.创建Dockerfile文件: 创建Dockerfile文件,下载jdk与tomcat放在Dockerfile同目录下. Dockerfile文件内容: FROM Ubuntu:14.10 MAI ...
- linux下如何打包压缩?解包解压?.tar文件.gz文件
===文件打包.压缩 ==打包 tar [root@521478.com]# tar -cvf etc1.tar /etc //c创建 v详细 f打包后文件名 [root@521478.com]# t ...