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 ...
随机推荐
- 转载文章----初识Ildasm.exe——IL反编译的实用工具
转载地址http://www.cnblogs.com/yangmingming/archive/2010/02/03/1662307.html Ildasm.exe 概要:(路径:C:\Program ...
- WPF学习之路(三) 属性与依赖
类型是DependencyProperty的属性是依赖属性 依赖属性不同于普通的.Net属性,类似于一个计算过程,根据依赖的值得到最终值. 为什么引入依赖属性: MSDN原文 One of the p ...
- laravel excel迁移到lumen
1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出 ...
- 密码校验正则表达式(java 环境)
密码校验需求: 1) 密码控制只能输入字母.数字.特殊符号(~!@#$%^&*()_+[]{}|\;:'",./<>?)2) 长度 6-16 位,必须包括字母.数字.特殊 ...
- PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 的解决方法
我也是PHP新手,通过w3cschool了解了一下php基本原理之后就开写了.但仍是菜鸟. 先不管3DES加密的方法对不对,方法都是网上的,在运行的时候报了个错,把小弟整死了.找来找去终于自己摸出了方 ...
- PostgreSQL-安装9.2
一.环境 VM虚拟机 NAME="Ubuntu" VERSION="12.04.4 LTS, Precise Pangolin" 二.过程 1.安装make ...
- jasperreports+iReport制作报表笔记
一. 准备工作 1. 下载相关工具:点击此下载相关工具,jasperreports-5.6.0-project.zip中有提供所需的jar包. 二. 安装ant 1. 解压apache-ant-1.9 ...
- android WebView网页浏览器
组件位置:composite>WebView .xml <WebView android:id="@+id/webview_pipeweb" android:layou ...
- Unity3d Asset Server启动问题
周末机房停电后asset server无法启动,点击启动出现“asset server could not start server”. 几经周折,找到原来是用户问题,解决办法如下: 1.命令行输入“ ...
- Hadoop安装lzo实验
参考http://blog.csdn.net/lalaguozhe/article/details/10912527 环境:hadoop2.3cdh5.0.2 hive 1.2.1 目标:安装lzo ...