• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C API 连接MySql_MySQL

mysql 搞代码 4年前 (2022-01-09) 17次浏览 已收录 0个评论

gaodaima.com

编译环境:WIN7,VS2010,MYSQL版本5.0
因为VS2010自带的CRecordSet类不能与MYSQL5.0匹配,反正我的电脑上是一创建CRecordSet类VS就崩溃,
所以如果想用ODBC接口的话只能直接调用WINAPI,代码既难看又麻烦
于是根据MYSQL自带手册编写了自己的MYSQL类,调试成功,源代码如下:

pse”>mysql.h

/*  <br /> * [3/9/2012] <br /> * Powered by akaka <br /> * <br /> * akaka_mysql_h <br /> * <br /> * C API连接MYSQL数据库 <br /> * 一、包含/include 和 /lib <br /> * 二、#include (不添加会导致编译时错误) <br /> * 三、添加libmysql.lib <br /> * 四、设置环境变量:这里直接将/lib 目录下的libmysql.dll复制到c:/windows/system32/ 目录下  <br /> * <br /> */<br />#pragma once  <br />#include "std_lib_facilities.h"  <br />#include   <br />#include   <br />  <br />class CMysql{    <br />public:  <br />    CMysql();  <br />    ~CMysql();   <br />    void connect(const char *host, const char *user, const char *passwd,   <br />        const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag);  <br />    void query(const char *query);    <br />    void printinfo ();  <br />    void printrows ();  <br />  <br />private:  <br />    MYSQL* _sql;  <br />    MYSQL_RES* _sqlres;     // result set   <br />private:  <br />    unsigned int _column;   // how many columns in a row in "result set"  <br />};  

pse”>mysql.cpp

/*  <br /> * [3/9/2012] <br /> * Powered by akaka <br /> * <br /> *  <br /> * akaka_mysql.cpp <br /> */   <br />  <br />#include "akaka_mysql.h"  <br />  <br />//------------------------------------------------------------------------------  <br />  <br />CMysql::CMysql()  <br />{  <br />    if( (_sql = mysql_init(NULL)) == NULL)  <br />    {   throw runtime_error("failed in mysql_init!") ;}  <br />}  <br />  <br />CMysql::~CMysql()  <br />{  <br />    if(_sql)   <br />        mysql_close(_sql);  <br />}  <br />  <br />//------------------------------------------------------------------------------  <br />  <br />void CMysql::connect(const char *host, const char *user, const char *passwd,   <br />    const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)   <br />{  <br />    if (mysql_real_connect(_sql, host, user, passwd, db,  <br />         port, unix_socket, client_flag) == NULL)  <br />         throw runtime_error("failed in mysql_connect!");  <br />  <br />}  <br />  <br />//------------------------------------------------------------------------------   <br />void CMysql::query(const char *query)  <br />{  <br />    // mysql_query Returns:  <br />    // Zero if the query was successful. Non-zero if an error occurred.   <br />    if(mysql_query(_sql, query))  <br />        throw runtime_error("failed in mysql_query!");  <br />  <br />    _sqlres = mysql_store_result(_sql); // 保存结果集  <br />}  <br />  <br />//--------------------------------------------------------------------<b style="color:transparent">本文来源gao@!dai!ma.com搞$$代^@码网*</b>----------    <br />void CMysql::printinfo()  <br />{  <br />    // count how many columns in a row in "result set"  <br />    _column = 0;  <br />       <br />    MYSQL_FIELD* sqlfield;  <br />    while(sqlfield = mysql_fetch_field(_sqlres)) //遍历字段  <br />    {     <br />        cout << '[' <name << ']';  <br />        _column++;  <br />    }  <br />    cout << endl;  <br />}  <br />  <br />//------------------------------------------------------------------------------    <br />void CMysql::printrows()  <br />{  <br />    MYSQL_ROW sqlrow;  <br />    while( sqlrow = mysql_fetch_row(_sqlres)) // 遍历结果集  <br />    {  <br />        for(unsigned int i = 0; i < _column; i++) // 遍历每列  <br />        {  <br />            cout << '[' << sqlrow[i] << ']';  <br />        }  <br />        cout << endl;  <br />    }     <br />}  

pse”>main.cpp

//------------------------------------------------------------------------------  <br />// main  <br />int main()  <br />{  <br />    const char* host = "localhost";  <br />    const char* user = "root";  <br />    const char* passwd = "1121";  <br />    const char* db = "my";  <br />    const unsigned int port = 3306;  <br />    const char* unix_socket = NULL; // If unix_socket is not NULL, the string specifies the socket   <br />                                    // or named pipe that should be used.   <br />                                    // Note that the host parameter determines the type of the connection.   <br />    const unsigned long client_flag = 0;  // The value of client_flag is usually 0, but can be set to a combination of the following flags to enable certain features:   <br />  <br />    try  <br />    {  <br />        CMysql mysql;  <br />        mysql.connect(host,user,passwd,db,port,unix_socket,client_flag);  <br />        mysql.query("SELECT * FROM myclass");  <br />        mysql.printinfo();  <br />        mysql.printrows();  <br />        return 0;  <br />    }catch(runtime_error& e)  <br />    {  <br />        cerr << e.what() << endl;  <br />        return 1;  <br />    }  <br />}  

运行结果:

gaodaima.com


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C API 连接MySql_MySQL
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址