c++服务端和客户端如何编程?有源代码吗?谁能教一下

 我来答
遥感专业赵杰迪
2015-12-16 · TA获得超过125个赞
知道小有建树答主
回答量:101
采纳率:0%
帮助的人:20.2万
展开全部
我给你发个文件吧。

#ifndef MYMYSQL_H
#define MYMYSQL_H

//windows下使用mysql.h的方法
//路径中使用/符号
#include <windows.h>
#include <C:/mysql/include/mysql.h>

//linux下使用mysql.h的方法
//#include <mysql/mysql.h>

/*
int listen_st;//linux下的定义socket描述符的写法
SOCKET listen_st;//windows下的定义socket描述符的写法
*/

#include <QStandardItemModel>

class mymysql
{
public:
mymysql();
const char *geterror();
//第一个参数代表server IP地址,第二个参数代表用户名,第三个密码,第四个使用数据库名
int sql_connect(const char *Hostname, const char *User, const char *Password, const char *DBName);
void sql_disconnet();
int sql_exec(const char *SQL);
int sql_open(const char *SQL, QStandardItemModel **p);
private:
MYSQL *connection;
MYSQL mysql;
char buf[1024];
};

#endif // MYMYSQL_H

#include <string.h>
#include "mymysql.h"
#include <QMessageBox>

//所有有关mysql API函数调用,都是在mymysql这个类里面实现的

//建这个类的目的是实现封装,封装所有和mysql相关函数,所有和mysql相关的函数,都放到mymysql这个类里面
mymysql::mymysql()
{
mysql_init(&mysql);
connection = NULL;
memset(buf, 0, sizeof(buf));
}

int mymysql::sql_connect(const char *Hostname, const char *User, const char *Password, const char *DBName)
{
connection = mysql_real_connect(&mysql, Hostname, User, Password, DBName, 0, 0,0);
if (connection == NULL)
{
memset(buf, 0, sizeof(buf));
strcpy(buf, mysql_error(&mysql));
//QMessageBox::information(0, "", mysql_error(&mysql));
return -1;
}else
{
mysql_query(connection, "set names utf8");
return 0;
}

}

const char *mymysql::geterror()
{
return buf;
}

void mymysql::sql_disconnet()
{
if (connection)
{
mysql_close(connection);
connection = NULL;
}
}

int mymysql::sql_exec(const char *SQL)
{
if (mysql_query(connection, SQL) != 0)
{
memset(buf, 0, sizeof(buf));
strcpy(buf, mysql_error(&mysql));
return -1;
}
return 0;
}

int mymysql::sql_open(const char *SQL, QStandardItemModel **p)
{
if (mysql_query(connection, SQL) != 0)
{
memset(buf, 0, sizeof(buf));
strcpy(buf, mysql_error(&mysql));
return -1;
}

MYSQL_RES *result = mysql_store_result(connection);
if (result == NULL)//没有查询结果
{
memset(buf, 0, sizeof(buf));
strcpy(buf, mysql_error(&mysql));
return -1;
}

int rowcount = mysql_affected_rows(connection);//这个函数返回SQL语句执行后又多少行
int fieldcount = mysql_field_count(connection);//这个函数返回SQL语句执行后有多少列

*p = new QStandardItemModel(rowcount, fieldcount);//根据SQL语句返回的行列总数,动态的建一个modul出来.
MYSQL_FIELD *field;

int i = 0;
int j = 0;
for(i = 0;i<fieldcount;i++)
{
field = mysql_fetch_field(result);
(*p)->setHeaderData(i, Qt::Horizontal, field->name);
}

for(i = 0;i<rowcount;i++)//循环遍历每一行
{
MYSQL_ROW row = mysql_fetch_row(result);
for(j = 0;j<fieldcount;j++)//循环遍历一行当中所有的列
{
(*p)->setData((*p)->index(i, j, QModelIndex()), row[j]);
}
}

mysql_free_result(result);//释放通过mysql_store_result函数分配的内存空间
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式