C API 连接MySql_MySQL

php中文网
发布: 2016-06-01 13:49:27
原创
1083人浏览过

bitsCN.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<Windows.h> (不添加会导致编译时错误) <br /> * 三、添加libmysql.lib <br /> * 四、设置环境变量:这里直接将/lib 目录下的libmysql.dll复制到c:/windows/system32/ 目录下  <br /> * <br /> */<br />#pragma once  <br />#include "std_lib_facilities.h"  <br />#include <windows.h>  <br />#include <mysql.h>  <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 />//------------------------------------------------------------------------------    <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 << '[' << sqlfield->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 />}  
登录后复制

运行结果:

Android JNI开发入门与提高 中文WORD版
Android JNI开发入门与提高 中文WORD版

本文档主要讲述的是Android JNI开发入门与提高;JNI在Android系统中有着广泛的应用。Android系统底层都是C/C++实现的,上层提供的API都是Java的,Java通过JNI调用底层的实现。比如:Android API多媒体接口MediaPlayer类,其实底层通过JNI调用libmedia库。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

Android JNI开发入门与提高 中文WORD版 0
查看详情 Android JNI开发入门与提高 中文WORD版
bitsCN.com
相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号