游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2165|回复: 3

???是否有VC存取My-sql的?例程式可以?⒖?

[复制链接]

2

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2004-2-26 01:30:00 | 显示全部楼层 |阅读模式
用作?上??蛸Y料?斓挠猛
希望有人可以提供一下 ??~

28

主题

685

帖子

703

积分

高级会员

Rank: 4

积分
703
发表于 2004-2-26 08:19:00 | 显示全部楼层

Re:???是否有VC存取My-sql的?例程式可以?⒖?

我自己的一些简单封装
/*
*        2003-12-11 mysql的封装类。
                   W.M.
*/
#pragma once
#include "win32inc.h"
#if _MFC_VER<1300
#define __WIN__
#endif

#include <mysql.h>

#if _MFC_VER<1300
#pragma comment(lib,"libmysql.lib")
#endif


//CMysqlDatabase这个用法比较简单。
//一般三行就够了。
//CMysqlDatabase db;
//db.Init();
//db.Connect();
//查询的时候用db.Query("select * from game_info");
//取结果的时候用
//CMysqlResult res;
//res.Retrive_Res(db);这样就可以了。
//要取得结果中一行的数据。
//CMysqlRow row
//row.Retrive_rows(res);
//要从row中取得第i个字段的长度和内容。
//row.Get_Length(i),
//row.Get_Field(i)
//有个例子在最后面

class CMysqlDatabase
{
public:
        bool Init()
        {
                if(NULL==mysql_init(&m_sqlhandle))
                        return false;
                else
                        return true;
        }
        bool Connect(const char *db="game");
        void Deinit()
        {
                g_Log.debug(__FUNCTION__,"close connecting..");
                mysql_close(&m_sqlhandle);
        }
        bool Query(const char *param)
        {
                if(mysql_query(&m_sqlhandle,param)==0)
                        return true;
                else
                        return false;
        }
        const char *GetErrStr()
        {
                return mysql_error(&m_sqlhandle);
        }

        //这个是假如已失去联系,就重新连接一次。
        bool Ping()
        {
                if(0==mysql_ping(&m_sqlhandle))
                        return true;
                else
                        return false;
        }

//下面是暂时不常用的一些命令
public:
    int Select_Database(const char *dbname);
        int Create_Database(const char *dbname);
        int Drop_Database(const char *dbname);
        MYSQL *_GetMysqlHandle(){return &m_sqlhandle;}
private:
        MYSQL m_sqlhandle;
};

class CMysqlResult
{
public:
        ~CMysqlResult()
        {
                Free_Res();
        }
        bool Retrieve_Res(CMysqlDatabase &sqldb);
        void Free_Res()
        {
                if(!m_res)
                {
                        return;
                }
                mysql_free_result(m_res);
                m_res=NULL;
        }

        unsigned int Get_Row_Nums(){return m_Row_Nums;}
        unsigned int Get_Field_Nums(){return m_Field_Nums;}
        bool Is_Eof(){return (mysql_eof(m_res)!=0);}
public:
        MYSQL_RES *_GetMysqlRes(){return m_res;}
private:
        unsigned long m_Row_Nums;
        unsigned int m_Field_Nums;
        MYSQL_RES *m_res;
};

class CMysqlFields
{
        friend class CMysqlField;
public:
        bool Retrieve_Fields(CMysqlResult &sqlres);
private:
        MYSQL_FIELD *m_fields;
};

class CMysqlField
{
public:
        bool Retrieve_Field(CMysqlFields &sqlfields,unsigned int fieldnum);
private:
        const MYSQL_FIELD *m_field;
public:
        const char *name(){return m_field->name;}
        const char *table(){return m_field->table;}
        const char *org_table(){return m_field->org_table;}
        const char *db(){return m_field->db;}
        const char *def(){return m_field->def;}
        unsigned long length(){return m_field->length;}
        unsigned long max_length(){return m_field->max_length;}
        unsigned int flags(){return m_field->flags;}
        unsigned int decimals(){return m_field->decimals;}
        enum enum_field_types type(){return m_field->type;}
};

class CMysqlRow
{
public:
        bool Retrieve_Rows(CMysqlResult &sqlres);
public:
        unsigned long Get_Length(int i){return m_lengths;}
        const char *Get_Field(int i){return m_rows;}
private:
        MYSQL_ROW m_rows;
        unsigned long *m_lengths;
};


//void Printres(CMysqlDatabase &dddd);
//
//int _tmain(int argc, _TCHAR* argv[])
//{
//        CMysqlDatabase db;
//        db.Init();
//        if(!db.Connect("wangmeng","sevencat"))
//        {
//                std::cout<<db.GetErrStr();
//                char bb;
//                std::cin>>bb;
//        }
//        db.Query("select * from game_info");
//        Printres(db);
//        db.Query("select * from play_info");
//        Printres(db);
//        char bb;
//        std::cin>>bb;
//        return 0;
//}
//
//void Printres(CMysqlDatabase &dddd)
//{
//        CMysqlResult res;
//        res.Retrieve_Res(dddd);
//
//        CMysqlFields fields;
//        fields.Retrieve_Fields(res);
//
//        for(int i=0;i<res.Get_Field_Nums();i++)
//        {
//                CMysqlField field;
//                field.Retrieve_Field(fields,i);
//                std::cout<<"Field Name: "<<field.name()<<"  Field Length:"<<field.length()<<"  Field Max Length:"<<field.max_length()<<std::endl;
//        }
//
//        CMysqlRow row;
//        int j=1;
//        while(row.Retrieve_Rows(res))
//        {
//                std::cout<<j++<<":";
//                for(int k=0;k<res.Get_Field_Nums();k++)
//                {
//                        const char *data=row.Get_Field(k);
//                        if(data==NULL)
//                        {
//                                data="NULL";
//                        }
//                        printf("%6s| ",data);
//                }
//                std::cout<<std::endl;
//                std::cout<<"-------------------------------------------------------------------"<<std::endl;
//        }
//        std::cout<<"===================End Here==========="<<std::endl;
//        res.Free_Res();
//}

28

主题

685

帖子

703

积分

高级会员

Rank: 4

积分
703
发表于 2004-2-26 08:19:00 | 显示全部楼层

Re:???是否有VC存取My-sql的?例程式可以?⒖?

#include "Mysql.h"
#include "..\servercfg.h"
//==========CMysqlDatabase

bool CMysqlDatabase::Connect(const char *db)
{
        g_Log.debug(__FUNCTION__,"begin connecting...");
        return (mysql_real_connect(&m_sqlhandle,g_ServerCfg.Get_DbHost(),g_ServerCfg.Get_DbUser(),g_ServerCfg.Get_DbPass(),db,g_ServerCfg.Get_DbPort(),NULL,0)!=NULL);
}

int CMysqlDatabase::Select_Database(const char *dbname)
{
        if(0==mysql_select_db(&m_sqlhandle,dbname))
                return true;
        return false;
}

int CMysqlDatabase::Create_Database(const char *dbname)
{
        char buf[255];
        sprintf(buf,"create database %s",dbname);
        return Query(buf);
}

int CMysqlDatabase:rop_Database(const char *dbname)
{
        char buf[255];
        sprintf(buf,"drop database %s",dbname);
        return Query(buf);
}


//==================================CMysqlResult==========
bool CMysqlResult::Retrieve_Res(CMysqlDatabase &sqldb)
{
        m_res=mysql_store_result(sqldb._GetMysqlHandle());
        if(NULL==m_res)
                return false;
        //my_ulonglong其实就是unsigned long
        m_Row_Nums=mysql_num_rows(m_res);
        m_Field_Nums=mysql_num_fields(m_res);
        return true;
}


//========================CMysqlFields========
bool CMysqlFields::Retrieve_Fields(CMysqlResult &sqlres)
{
        m_fields=mysql_fetch_fields(sqlres._GetMysqlRes());
        return (m_fields!=NULL);
}

//========================CMysqlField
bool CMysqlField::Retrieve_Field(CMysqlFields &sqlfields,unsigned int fieldnum)
{
        m_field=&sqlfields.m_fields[fieldnum];
        return (m_field!=NULL);
}

//==================CMysqlRow
bool CMysqlRow::Retrieve_Rows(CMysqlResult &sqlres)
{
        m_rows=mysql_fetch_row(sqlres._GetMysqlRes());
        m_lengths=mysql_fetch_lengths(sqlres._GetMysqlRes());
        return (m_rows!=NULL);
}

2

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 发表于 2004-2-26 13:30:00 | 显示全部楼层

Re: Re:???是否有VC存取My-sql的?例程式可以?⒖?

非常感?你 我研究一下...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-14 16:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表