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


/* <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>}; </mysql.h></windows.h></windows.h>


/* <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 name _column++; <br> } <br> cout } <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 { <br> cout } <br> cout } <br>}


//------------------------------------------------------------------------------ <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 return 1; <br> } <br>}
运行结果:

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Comment saisir des symboles de fraction sur l'ordinateur (méthode simple et rapide pour saisir des symboles de fraction)

Que dois-je faire si mon fond d'écran Win11 est verrouillé et ne peut pas être modifié ? Que faire si le fond d'écran de mon ordinateur est verrouillé et ne peut pas être modifié ?

Comment affiner la profondeur localement

Le moyen le plus simple de refléter l'écran de votre téléphone sur votre ordinateur (une étape pour projeter facilement l'écran de votre téléphone sur votre ordinateur)

L'icône du bureau disparaît et doit être réaffichée ou redimensionnée ? Introduction aux solutions rapides

Tutoriel de génération d'images Deepseek

Que dois-je faire si mon mot de passe Win10 ne répond pas aux exigences de la politique de mot de passe ? Que faire si le mot de passe de mon ordinateur ne répond pas aux exigences de la politique ?

Comment désactiver les services de localisation dans Win10 ? Conseils pour désactiver le système de positionnement sur votre ordinateur
