//vmysql.cpp#include "vmysql.h"#includeVmysql::Vmysql(){ mysql_init(&mysql1); connection=NULL; memset(errorbuf,0,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,0,sizeof(errorbuf)); strcpy(errorbuf,"sql_connect() 参数不可以为空!"); /*这里没有父窗口,所以第一个参数为0*/ //QMessageBox::critical(0,"错误信息","sql_connect() 参数不可以为空!"); return -1; } connection=mysql_real_connect(&mysql1,hostname,username,passwd,dbname,0,0,0); if(connection==NULL) { memset(errorbuf,0,sizeof(errorbuf)); strcpy(errorbuf,mysql_error(&mysql1)); //QMessageBox::critical(0,"错误信息",mysql_error(&mysql1)); return -1; } /*连接成功,设置字符集*/ if(mysql_query(connection,"SET NAMES utf8")!=0) { memset(errorbuf,0,sizeof(errorbuf)); strcpy(errorbuf,mysql_error(&mysql1)); return -1; } return 0;}/*断开数据库连接*/void Vmysql::sql_disconnect(){ if(connection) { mysql_close(connection); connection=NULL; }}/*执行SQL更新*/int Vmysql::sql_exec(const char *strsql){ if(strsql==NULL) { memset(errorbuf,0,sizeof(errorbuf)); strcpy(errorbuf,"sql_exec() 参数不可以为空!"); return -1; } if(mysql_query(connection,strsql)!=0) { memset(errorbuf,0,sizeof(errorbuf)); strcpy(errorbuf,mysql_error(&mysql1)); return -1; } return 0;}/*执行SQL查询*/int Vmysql::sql_query(const char *strsql,QStandardItemModel **model){ if(strsql==NULL||model==NULL) { memset(errorbuf,0,sizeof(errorbuf)); strcpy(errorbuf,"sql_query() 参数不可以为空!"); return -1; } if(mysql_query(connection,strsql)!=0) { memset(errorbuf,0,sizeof(errorbuf)); strcpy(errorbuf,mysql_error(&mysql1)); return -1; } /*获取结果集*/ 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,0,sizeof(errorbuf)); strcpy(errorbuf,mysql_error(&mysql1)); return -1; } /*创建返回model*/ /*创建一个rowcount行fieldcount列的model数据集; * 根据SQL语句返回的行列总数,动态的创建model*/ QStandardItemModel *tmodel=new QStandardItemModel(rowcount,fieldcount); /*创建列数据*/ MYSQL_FIELD *field=NULL; for(int i=0;i setHeaderData(i,Qt::Horizontal,field->name); } /*创建单元格数据*/ MYSQL_ROW row=NULL; for(int i=0;i index(0,0,QModelIndex()),index()函数第一个参数表示第几行,第二个参数表示第几列,第三参数是固定写法*/ tmodel->setData(tmodel->index(i,j,QModelIndex()),row[j]); } } *model=tmodel; /*释放mysql_store_result()函数分配的内存空间*/ mysql_free_result(result); return 0;}/*错误信息*/const char *Vmysql::ger_error(){ return this->errorbuf;}