C API 连接MySql_MySQL
Jun 01, 2016 pm 01:49 PM
인터페이스
컴퓨터
bitsCN.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>}
로그인 후 복사
运行结果:
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

인기 기사
Repo : 팀원을 부활시키는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
스플릿 소설을이기는 데 얼마나 걸립니까?
3 몇 주 전
By DDD
헬로 키티 아일랜드 어드벤처 : 거대한 씨앗을 얻는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌

인기 기사
Repo : 팀원을 부활시키는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
스플릿 소설을이기는 데 얼마나 걸립니까?
3 몇 주 전
By DDD
헬로 키티 아일랜드 어드벤처 : 거대한 씨앗을 얻는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제
Gmail 이메일의 로그인 입구는 어디에 있나요?
7287
9


자바 튜토리얼
1622
14


Cakephp 튜토리얼
1342
46


라라벨 튜토리얼
1259
25


PHP 튜토리얼
1206
29



컴퓨터에서 분수 기호를 입력하는 방법(분수 기호를 입력하는 쉽고 빠른 방법)

내 win11 배경화면이 잠겨서 변경할 수 없으면 어떻게 해야 합니까? 내 컴퓨터 배경화면이 잠겨서 변경할 수 없으면 어떻게 해야 합니까?

휴대폰 화면을 컴퓨터에 미러링하는 가장 쉬운 방법(휴대폰 화면을 컴퓨터에 쉽게 투영하는 한 단계)

바탕 화면 아이콘이 사라지고 다시 표시하거나 크기를 조정해야 합니까? 빠른 솔루션 소개

내 Win10 암호가 암호 정책 요구 사항을 충족하지 않으면 어떻게 해야 합니까? 내 컴퓨터 암호가 정책 요구 사항을 충족하지 않으면 어떻게 해야 합니까?

Win10에서 위치 서비스를 끄는 방법 컴퓨터에서 위치 확인 시스템을 끄는 방법
