C API 连接MySql

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

pse">mysql.h/*

* [3/9/2012]

* Powered by akaka

*

* akaka_mysql_h

*

* C API连接MYSQL数据库

* 一、包含/include 和 /lib

* 二、#include<Windows.h> (不添加会导致编译时错误)

* 三、添加libmysql.lib

* 四、设置环境变量:这里直接将/lib 目录下的libmysql.dll复制到c:/windows/system32/ 目录下

*

*/

#pragma once

#include "std_lib_facilities.h"

#include <windows.h>

#include <mysql.h>

class CMysql{

public:

CMysql();

~CMysql();

void connect(const char *host, const char *user, const char *passwd,

const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag);

void query(const char *query);

void printinfo ();

void printrows ();

private:

MYSQL* _sql;

MYSQL_RES* _sqlres; // result set

private:

unsigned int _column; // how many columns in a row in "result set"

}; pse">mysql.cpp/*

* [3/9/2012]

* Powered by akaka

*

*

* akaka_mysql.cpp

*/

#include "akaka_mysql.h"

//------------------------------------------------------------------------------

CMysql::CMysql()

{

if( (_sql = mysql_init(NULL)) == NULL)

{ throw runtime_error("failed in mysql_init!") ;}

}

CMysql::~CMysql()

{

if(_sql)

mysql_close(_sql);

}

//------------------------------------------------------------------------------

void CMysql::connect(const char *host, const char *user, const char *passwd,

const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)

{

if (mysql_real_connect(_sql, host, user, passwd, db,

port, unix_socket, client_flag) == NULL)

throw runtime_error("failed in mysql_connect!");

}

//------------------------------------------------------------------------------

void CMysql::query(const char *query)

{

// mysql_query Returns:

// Zero if the query was successful. Non-zero if an error occurred.

if(mysql_query(_sql, query))

throw runtime_error("failed in mysql_query!");

_sqlres = mysql_store_result(_sql); // 保存结果集

}

//------------------------------------------------------------------------------

void CMysql::printinfo()

{

// count how many columns in a row in "result set"

_column = 0;

MYSQL_FIELD* sqlfield;

while(sqlfield = mysql_fetch_field(_sqlres)) //遍历字段

{

cout << '[' << sqlfield->name << ']';

_column++;

}

cout << endl;

}

//------------------------------------------------------------------------------

void CMysql::printrows()

{

MYSQL_ROW sqlrow;

while( sqlrow = mysql_fetch_row(_sqlres)) // 遍历结果集

{

for(unsigned int i = 0; i < _column; i++) // 遍历每列

{

cout << '[' << sqlrow[i] << ']';

}

cout << endl;

}

} pse">main.cpp//------------------------------------------------------------------------------

// main

int main()

{

const char* host = "localhost";

const char* user = "root";

const char* passwd = "1121";

const char* db = "my";

const unsigned int port = 3306;

const char* unix_socket = NULL; // If unix_socket is not NULL, the string specifies the socket

// or named pipe that should be used.

// Note that the host parameter determines the type of the connection.

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:

try

{

CMysql mysql;

mysql.connect(host,user,passwd,db,port,unix_socket,client_flag);

mysql.query("SELECT * FROM myclass");

mysql.printinfo();

mysql.printrows();

return 0;

}catch(runtime_error& e)

{

cerr << e.what() << endl;

return 1;

}

}

运行结果:

时间: 2024-08-04 12:40:21

C API 连接MySql的相关文章

Linux下用C语言API连接MySQL数据库

像PHP和perl一样,MySQL也提供的C语言使用的API. C代码的API是随MySQL一起发布的. 它包含在mysqlclient库中, 可以使C程序来访问数据库. MySQL源码包中的许多客户端都是用C写的. 如果你正在找使用这些C API的例子, 可以看看客户端的写法.你可以在MySQL源码包的clients目录找到这些例子. 软件包 请确保你已经安装了必要的开发环境,比如gcc, mysql等等. 下面是编译一个程序所需要安装的软件包的列表 (Ubuntu为例): mysql-cli

c++连接mysql数据库的两种方法(ADO连接和mysql api连接)_C 语言

第一种方法可以实现我当前的需求,通过连接不同的字符串来连接不同的数据库.暂时只连接了mysql,sqlserver,oracle,access.对于access,因为它创建表的SQL语句不太兼容标准SQL语句,需要做一些处理,这里暂时不说.第二种方法只能针对于mysql数据库的连接,不过用这种方法不用安装MyODBC服务器程序. 不管用哪种方法,首先需要安装Mysql数据库,安装方法请看"mysql安装及一些注意点".最好安装一个Navicat for mysql,方便操作mysql数

MFC连接MySQL数据库时编辑框出现中文乱码

环境:Visual Studio 2010 + MySQL Server 5.1 + Navicat for Mysql 8.2 问题:MFC连接MySQL 数据库,编辑框出现中文乱码. 解决: 使用MySQL C API,在连接上数据库查询数据前加上 如下代码: mysql_query(&m_sqlCon,"SET NAMES 'GB2312'"); //m_sqlCon是MYSQL类型 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www

有关jsp-JavaScript + web service 连接mysql

问题描述 JavaScript + web service 连接mysql 如何实现?最好能有实例.比如说,mysql中有一个test数据,我想让html文件读取数据库的内容,用上述方法,如果有别的方法也可以,求详细例子.本人小白,各位大哥求帮助 解决方案 javascript是通过post等请求调用web service API.而web service内部再调用mysql,取决于你用什么实现的web service,那么一般都有对应类库调用musql 然后web service返回结果给js

hadoop-hive连接mysql 报错 readonly server

问题描述 hive连接mysql 报错 readonly server 各位大侠,我搭建了一个hadoop环境,用hive做数据仓库,mysql做hive的元数据仓库,用于定时分析用户数据中的日志文件,但在hive访问mysql的过程中,不定时的报如下错误: java.sql.SQLException: Query returned non-zero code: 1, cause: FAILED: Execution Error, return code 1 from org.apache.ha

java jdbc连接mysql数据库插入null值问题

问题描述 java jdbc连接mysql数据库插入null值问题 ps.setFloat(8 device.getLatitude());如果device.getLatitude()返回的是null就报错,也就是说setFloat不能插入空值,而setString()方法就可以,不知道为什么请高手指点,谢谢!! 解决方案 PreparedStatement.java 的给方法签名是这样的public void setFloat(int parameterIndex float x) throw

C连接MySQL数据库开发之Windows环境配置及测试

一.开发环境 Win8.1 64位.VS2013.MySQL5.5.3764位 MySQL安装目录为:C:\Program Files\MySQL\MySQL Server 5.5 二.配置工程环境 首先创建一个控制台空项目,打开VS2013,文件--> 新建项目 --> 常规 --> 选择"空项目"       因为我们要使用MySQL数据库的API接口编程,所以需要将工程的附加头文件搜索目录和附件库文件搜索目录,指向MySQL安装目录对应的位置,下面是我机子上my

Windows下用C语言连接Mysql注意问题

原文:Windows下用C语言连接Mysql注意问题环境是:在VS6.0 安装Mysql后,我们需要相应的头文件以及lib文件,所以安装过程必须是完整安装.否则不会生成include文件夹哦~ 具体步骤如下: 1.完全安装mysql,这样才能生成include文件夹. 2.在Directories的标 签页中右边的"Show directories for" 下拉列表中选中"Includefiles", 然后在中间列表框中添加你本地安装MySQL的include目录

vc++编程问题-MFC(C++)连接mysql数据库

问题描述 MFC(C++)连接mysql数据库 mfc连接mysql数据库之后,怎么向数据库里插入一条一句,或者是利用什么函数插入语句???? 解决方案 http://blog.csdn.net/lalor/article/details/6908382 解决方案二: 插入数据用的sql update 表 set(字段) values(值) 解决方案三: 可以使用ADO接口,对数据库的操作,都可以用ADO提供的API函数