⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mysqlclient.cpp

📁 以下是研究 mysql 5.0.22 得出的结果,描述并使用标准 c++演示了使用 MySQLC API 函数 简单操作数据库的流程
💻 CPP
字号:


/*****************************************************************
1. 以下是研究 mysql 5.0.22 得出的结果,描述并使用标准 c++演
示了使用 MySQLC API 函数 简单操作数据库的流程;
例子程序在 VC6(VC7.1) + windows 2000 上调试通过;
例子程序在 red hat linux 9,red fc6 上调试通过

2. 版权归 黄志辉 所有,可以自由修改发布,请保留作者信息,请记
住能共享的好东西要共享,做一个有良心的好程序员

3. 有什么技术克探讨. qq: 84075167
*****************************************************************/

#ifdef WIN32
#include <windows.h> 
typedef unsigned long  APIRETURN;
typedef unsigned long (__stdcall * funcptr)(void *);
#else
#include <pthread.h>
#include <unistd.h>
typedef void * APIRETURN;
#endif

#include <iostream>
#include <errmsg.h>
#include <time.h>

using namespace std;

/*****************************************************************/
///name       : main
//function    : 主测试函数
//access      : private
//para        : 
//         1. : int argc
//            : 系统参数个数
//         2. : char * argv[]
//            : 参数数值
//return      : 返回给 startup 函数的退出参数
//author      : hzh
//date        : 2006-06-24
/*****************************************************************/

#include "../db/connectpool.h"

using namespace std;

#include <mysql.h>

APIRETURN insert(void * para)
{
	for(;;)
	{
		for(int i = 0;i < 200;++i)
		{
			CMysqlClient client;
			CMysqlStore store;
			if(!store.SetTransAction(client.GetConnect()))
			{
				//std::cout<<"db connect pool busy on insert"<<endl;
				break;
			}
			std::string s_sql = "";
			s_sql = "insert into processingtransactioninterface";
			s_sql += "(acttype,resourceid,actresult,memo) values(";
			s_sql += "1,1,1,'发的沙')";
			if(!store.Exec(s_sql))
			{
				//执行SQL语句出错 
				store.RollBack();
				std::cout<<"execute insert syntax fail,"<<store.What().c_str()<<endl;
			}
			else
			{
				store.Commit();
			}
		}

#ifdef WIN32
		Sleep(DWORD(1000 * 0.01));
#else
		sleep(1);
#endif

	}
	return 0;
}

APIRETURN update(void * para)
{
	for(;;)
	{
		for(;;)
		{
			CMysqlClient client;
			CMysqlStore store;
			if(!store.SetTransAction(client.GetConnect()))
			{
				//std::cout<<"db connect pool busy on update"<<endl;
				break;
			}
			std::string s_sql = "";
			s_sql = "update processingtransactioninterface";
			s_sql += " set acttype=2,memo='aaa杀',actresult=3";
			s_sql += " where acttype = 1";
			if(!store.Exec(s_sql))
			{
				//执行SQL语句出错
				store.RollBack();
				std::cout<<"execute update syntax fail,"<<store.What().c_str()<<endl;
			}
			else
			{
				store.Commit();
			}
			break;
		}
#ifdef WIN32
		Sleep(DWORD(1000 * 0.01));
#else
		sleep(1);
#endif

	}

	return 0;
}

APIRETURN show(void * para)
{
	for(;;)
	{		
		for(;;)
		{
			CMysqlClient client;
			CMysqlStore store;
			if(!store.SetTransAction(client.GetConnect()))
			{
				//std::cout<<"db connect pool busy on show"<<endl;
				break;
			}

			/*
			这可能发生,例如,如果你正在使用mysql_use_result()
			并且在你已经调用了mysql_free_result()之前试图
			执行新查询。如果你在mysql_use_result()或
			mysql_store_result()之间试图执行返回数
			据的2个查询,它也可能发生。*/

			std::string s_sql = "select * from processingtransactioninterface";
			if(!store.Query(s_sql))
			{
				//删除表失败
				std::cout<<"query table fail,"<<store.What().c_str()<<endl;

			}
			else
			{
				for(unsigned long i = 0;i <store.RowCount();++i)
				{
					std::cout<<"result:"<<store.GetItemLong(i,"actresult")
						<<"memo:"<<store.GetItemString(i,"memo").c_str()
						<<";actid:"<<store.GetItemLong(i,0)<<endl;
				}

				s_sql = "delete from processingtransactioninterface";
				if(!store.Exec(s_sql))
				{
					//删除表失败
					store.RollBack();
					std::cout<<"delete table fail,"<<store.What().c_str()<<endl;
				}
				else
				{
					store.Commit();
				}
			}
			break;
		}

#ifdef WIN32
		Sleep(DWORD(1000 * 0.1));
#else
		sleep(10);
#endif
	}
	return 0;
}

int main( int argc, char * argv[] ) 
{	
	for(int i = 0;i < 3;++i)
	{
		std::string host = "10.6.0.21";
		std::string user = "root";
		std::string password = "mysql5";
		std::string dbname = "test";
		unsigned int port = MYSQL_PORT;
		CConnect * conn = new CMysqlConnect();
		conn->Connect(host,user,password,dbname,port);
		CConnPool::Instance().Add(conn);
	}

	CMysqlClient client;
	CMysqlStore store;
	store.SetTransAction(client.GetConnect());

	//先删除数据表
	std::string s_sql = "drop table processingtransactioninterface";
	if(!store.Exec(s_sql))
	{
		//删除表失败
		std::cout<<"drop table fail"<<endl<<store.What().c_str()<<endl;
	}
	else
	{
		std::cout<<"drop table success"<<endl;
	}

	//创建数据表,字段 actid 设置了自增列属性
	s_sql = "create table processingtransactioninterface(";
	s_sql += "actid integer not null AUTO_INCREMENT,";
	s_sql += "acttype integer not null,resourceid integer not null,";
	s_sql += " subresoureid  integer, actdate varchar(19), actresult integer,";
	s_sql += " memo varchar(50) null,primary key(actid))";
	if(!store.Exec(s_sql))
	{
		//创建表失败
		std::cout<<"create table fail"<<endl;
		return -1;
	}
	else
	{
		std::cout<<"create table success"<<endl;
		std::cout<<s_sql.c_str()<<endl;
	}


#ifdef WIN32
	unsigned long p1 = 0;	
	::CreateThread(0,0,(funcptr)show,0,0,&p1);
#else
	pthread_t p1 = 0;
	pthread_create(&p1,0,show,0);
#endif


#ifdef WIN32
	unsigned long p2 = 0;	
	::CreateThread(0,0,(funcptr)update,0,0,&p1);
#else
	pthread_t p2 = 0;
	pthread_create(&p2,0,update,0);
#endif

#ifdef WIN32
	unsigned long p3 = 0;
	::CreateThread(0,0,(funcptr)insert,0,0,&p1);
#else
	pthread_t p3 = 0;
	pthread_create(&p1,0,insert,0);
#endif

#ifdef WIN32
	system("pause");
#else
	pause();
#endif

	return 1;
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -