c++调用mysql接口以及存储过程

mysql在sdk中为c语言提供了一些访问接口,我们可以使用这些接口连接并访问mysql数据库,当然也可以调用mysql存储过程
例子:
首先下载mysql的sdk,解压好以后,里面包含一个include,和lib文件夹。我们在自己的工程中包含这两个文件夹的目录,并且设置好连接库选项即可。 我们先建立一个工程,运行下看看,再看其中的代码。
1. 这里我们使用vs2003建立一个空的window console工程,添加一个cpp源文件。
2. 拷贝最后面的源代码到cpp文件中。
3. 设置好工程路径:project --> properity --> c/c++下general选项中Additional include directories选项添加上面说的include目录。 project --> properity --> linker下general选项中Additional library directories中添加上面的lib目录。project --> properity --> linker下input选项中添加libmysql.lib文件。这样我们的工程就设置完毕。
4. 下面编译-连接-运行。在窗口中可以看到结果。
总结:
1. mysql提供mysql_query()来在c语言中使用sql语句来访问数据库。同理,我们可以使用该接口执行call processname()这个语法来调用mysql存储过程。代码中也是这么使用的。
2. 这里我们需要提前在mysql数据库中创建一个存储过程,具体的创建方法,在文章【mysql存储过程简介 】中有介绍。
3. 包含mysql.h需要包含window.h才可以正常编译。

数据库说明:
该例子中,我们已经在test数据库中建立一个shop表,其中有三个字段,article int(4), dealer char(20), price double(16,2)。 存储过程为在shop表中增加一条记录。
mysql存储过程代码:
CREATE [ft=#000000,,` PROCEDURE `AddInfo`(`_article` int(4), `_dealer` char(20), `_price` double(16,2) )
BEGIN
set @result = 0;
insert into shop values( _article, _dealer, _price );
set @result = 1;
END;
c++源代码:
#include <windows.h>
#include <iostream>
#include <string>
#include "mysql.h" //在工程设置中,包含在mysql的sdk中的include文件夹下
using namespace std;
string host="localhost"; //登陆mysql使用的主机名
string user="root"; //登陆用户
string pwd="******"; //填写自己数据库密码
string dbname="test"; //您要登陆的数据库名
string sql="select * from shop"; //sql语句,下面使用接口在c语言中执行该语句
string sqlProcess="call AddInfo( 6, 'K', 100.25 )"; //sql存储过程语句
unsigned int port=3306; //数据库端口,默认为3306,也可以填写你自己制定的端口
int status; //数据库执行返回的状态,sql语句执行成功返回0
int main()
{
MYSQL *mysql;
mysql=mysql_init(0); //接口,初始化
MYSQL_RES *result;
MYSQL_ROW row; //返回数据行
//连接数据库
if( mysql_real_connect( mysql, host.c_str(), user.c_str(), pwd.c_str(), dbname.c_str(), port, NULL, CLIENT_FOUND_ROWS ) == NULL )
{
cout << "connect failure!" << endl;
return EXIT_FAILURE;
}
else
{
cout << "connect success!" << endl;
}
mysql_set_character_set( mysql, "gbk" );
//执行存储过程调用
status = mysql_query( mysql, sqlProcess.c_str( ) );
if( status != 0 )
{
cout << "query failure!" << endl;
}
cout << "the status is :" << status << endl;
//查询数据库中数据,检验刚才的存储过程是否成功
status = mysql_query( mysql, sql.c_str( ) );
if( status != 0 )
{
cout << "query failure!" << endl;
}
cout << "the status is :" << status << endl;
result = mysql_store_result( mysql );
//显示结果
while( row = mysql_fetch_row( result ) )
{
cout << row[1] <<"|" << row[2] << endl;
}
mysql_free_result( result );
mysql_close( mysql );
}
Tags: 

延伸阅读

最新评论

发表评论