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 ...
随机推荐
- 【好书摘要】性能优化中CPU、内存、磁盘IO、网络性能的依赖
系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上 ...
- 使用AS3输出ByteArray为16进制
package { import flash.utils.ByteArray; /** * 输出ByteArray为16进制 * @author Rise */ public class Byte2H ...
- 心理控制方法——阅读Notes
1.自助式情感手术 祛除自我意象中的伤疤的要点 2. 你制造错误,但是错误不应造就你 你身上的缺点不是你的错 3. 不仅要原谅别人,也要原谅自己 4. 怨恨是一条通向失败的道路 5. 注意来 ...
- get请求报文
GET /02_WEB_HTTP/index.html?username=admin&password=123123 HTTP/1.1 Accept: application/x-ms-app ...
- 各类 HTTP 返回状态代码详解
完整版 1**(信息类):表示接收到请求并且继续处理 100——客户必须继续发出请求 101——客户要求服务器根据请求转换HTTP协议版本 2**(响应成功):表示动作被成功接收.理解和接受 200— ...
- 深入解析Windows操作系统笔记——CH1概念和术语
1.概念和工具 本章主要介绍Windows操作系统的关键概念和术语 1.概念和工具 1.1操作系统版本 1.2基础概念和术语 1.2.1Windows API 1.2.2 服务.函数和例程 1.2.3 ...
- 字符集GBK升级UTF8
在生产环境中,数据库字符集因为各种原因需要升级,比如为了支持汉字,从latin1字符集升级到GBK,后面为了支持多个语言文字,需要将GBK升级到UTF8等.迁移过程网上有很多,我今天主要想讲下字符集转 ...
- js 添加节点dom
var elemet = document.createElement("p"); var attr=document.createAttribute("align&qu ...
- 设计模式C#实现(十一)——组合模式
意图 0 适用性 1 结构 2 实现 3 效果 4 意图 将对象组合成树形结构以表示“部分-整体”的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 适用性 你想表示对象的部 ...
- PlaceHolder的两种实现方式
placeholder属性是HTML5 中为input添加的.在input上提供一个占位符,文字形式展示输入字段预期值的提示信息(hint),该字段会在输入为空时显示. 如 <input typ ...