//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 数据库编程四的更多相关文章

  1. Qt数据库编程1

    Qt中数据编程主要分为以下两点:1.利用qt提供类 访问数据库或者成为简单的数据库编程2.数据库编程中引入model/view编程模型 qt中数据库编程的步骤: 1.加载数据库驱动 QSqlDatab ...

  2. QT 数据库编程三

    //mainwindow.cpp #include "mainwindow.h" #include "logindlg.h" #include "sc ...

  3. Qt——数据库编程

    一.概述 Qt提供了一个类似JDBC的数据库接口,需要为每个可以连接的特定数据库提供驱动程序,可以通过 QStringList QSqlDatabase::drivers() 知道当前版本的Qt哪些驱 ...

  4. Qt数据库编程_基本

    QtSql模块提供了一个平台无关且数据库无关的访问SQL数据库的接口. Qt中的每个数据库连接用一个QSqlDatabase对象来表示:Qt使用不同driver来和各种不同数据库的API进行通讯. Q ...

  5. QT 数据库编程二

    //logindlg.cpp #include "logindlg.h" #include <QGridLayout> #include <QHBoxLayout ...

  6. QT基于model/view数据库编程2

    Qt中数据编程主要分为以下两点:1.利用qt提供类 访问数据库或者成为简单的数据库编程2.数据库编程中引入model/view编程模型 基于model/view数据库编程: qt提供model类: Q ...

  7. python 闯关之路四(下)(并发编程与数据库编程) 并发编程重点

    python 闯关之路四(下)(并发编程与数据库编程)   并发编程重点: 1 2 3 4 5 6 7 并发编程:线程.进程.队列.IO多路模型   操作系统工作原理介绍.线程.进程演化史.特点.区别 ...

  8. python-网络安全编程第四天(数据库编程&网络编程)

    前言 好几天没更因为寒假放假回家放松了几天 嘿嘿 今天继续开始启动学习模式. python数据库编程 Python DB API访问数据库流程 Python DB API包含的内容 什么是 PyMyS ...

  9. c++学习书籍推荐《C++ GUI Qt 4编程(第2版)》下载

    下载地址:点我 百度云及其他网盘下载地址:点我 编辑推荐 <C++ GUI Qt 4编程(第2版)>讲授的大量Qt4编程原理和实践,都可以轻易将其应用于Qt4.4.Qt4.5及后续版本的Q ...

随机推荐

  1. js DOM Document类型

    JavaScript通过Document类型访问文档.在浏览器中,document对象是HTMLDocument(继承自 Document类型)的一个实例,表示整个HTML页面.document对象是 ...

  2. CSS3 Gradient线性渐变

    废话小说,看代码 <!DOCTYPE html > <html > <head> <meta charset="utf-8"> &l ...

  3. C#处理猜拳问题(非窗体)

    //猜拳,5局3胜,要求使用公用变量. namespace 结构体复习_公用变量 { class Program {public int rz=0; public int dz = 0; public ...

  4. SQL Server 使用游标更新数据库中的数据(使用存储过程)

    ALTER PROCEDURE [dbo].[POR_CURSOR_FOR_UPDATE] --创建存储过程 AS BEGIN SET nocount ON --忽略行数显示 DECLARE Upda ...

  5. 0003 64位Oracle11gR2不能运行SQL Developer的解决方法

    "应用程序开发"下的"SQL Developer"双击不可用,出现“Windows正在查找SQLDEVELOPER.BAT"的提示,如下图: 搜索博客 ...

  6. SQL Server开发接口生成方法

    为提高开发效率,生成固定格式的接口是必须的,以下以提供新增/修改/删除/读取接口为例: 以常见的表结构为例,特殊表结构可自己尝试去调整方法 主要通过系视图 sys.columns生成方法:为包含列的对 ...

  7. HTTP状态码分类说明

    状态码分类 HTTP状态码被分为五大类, 目前我们使用的HTTP协议版本是1.1, 支持以下的状态码.随着协议的发展,HTTP规范中会定义更多的状态码. 小技巧:  假如你看到一个状态码518, 你并 ...

  8. Addthis使用

    一.使用 https://www.addthis.com/.国外的SNS分享站点较多,适用于英文站点内容的分享.有教程. 我的测试代码如下: <html> <meta charset ...

  9. [PHP]程序员技能栈

    [PHP]程序员技能栈.md-/Users/zjh/Documents/我的文章/[PHP]程序员技能栈 html{font-family: sans-serif;-ms-text-size-adju ...

  10. UVA 12716 GCD XOR【异或】

    参考:http://www.cnblogs.com/naturepengchen/articles/3952145.html #include<stdio.h> #include<s ...