C++连接mysql的方法(直接调用C-API)

我装的是5.1版本,需要的头文件有

把需要的文件添加进去,然后再把 libmysql.lib放到项目目录里,文件在mysql安装目录 lib 下面.

#include "stdafx.h"
#include <iostream>
#include <winsock2.h>
#include "mysql.h"
//#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib,"libmysql.lib")
using namespace std;
int main(int argc, char* argv[])
{

  mysql_library_init(NULL,0,0);
  MYSQL mysql;
  mysql_init(&mysql);

  if(0==mysql_options(&mysql,MYSQL_SET_CHARSET_NAME,"utf8"))//设置字符集
  {
    cout << "设置字符集成功\n\n" <<endl;
  }

  if(!mysql_real_connect(&mysql,"localhost","root","kwgkwg","test",0,NULL,CLIENT_MULTI_STATEMENTS))//连接数据库
  {
    cout << "not connect mysql" << endl;
  }else
  {
    cout << "welcome to mysql\n\n\n";
  }

  mysql_query(&mysql,"select * from demo1");     //执行SQL语句
  MYSQL_RES *result=mysql_store_result(&mysql);    //获取资源
  int rowcount=mysql_num_rows(result);        //获取记录数
  unsigned int fieldcount=mysql_num_fields(result);  //获取字段数

  //cout << rowcount << endl;

  MYSQL_FIELD *field=NULL;              //字段
  MYSQL_ROW row=NULL;             //记录
  while(row=mysql_fetch_row(result))
  {
    for(unsigned int i=0;i<fieldcount;i++)
    {
      field=mysql_fetch_field_direct(result,i);
      cout<<field->name<<":"<<row[i] <<"\n";
    }
  } 

  mysql_free_result(result);
  mysql_close(&mysql);
  mysql_server_end();
  mysql_library_end();

  return 0;
}

C++访问 (直接调用C-API)

#include <iostream>
#include <windows.h>
#include <mysql.h>
#include <string>
static const char host[32] = "localhost";
static const char user[32] = "test";
static const char passwd[32] = "passwd";
static const char db[32] = "test";
/**
mysql> select * from t;
+----+
| id |
+----+
| 1 |
+----+
1 row in set (0.00 sec)
mysql> delimiter //
mysql> create procedure get_t(in t1 int)
  -> begin
  -> select id from t where id=t1;
  -> end
  -> //
Query OK, 0 rows affected (0.05 sec)
mysql> call get_t(1);
  -> //
+----+
| id |
+----+
| 1 |
+----+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
*/
void test_more_results(MYSQL* h)
{
  char str[512] = "insert into test_num values(101);insert into test_num values(122);commit;";
  int r = mysql_real_query(h, str, strlen(str));
  if (r)
  {
    const char * error = mysql_error(h);
    std::cout<<"*** Connection Error " << error << std::endl;
  }
  do
  {
    MYSQL_RES* res = mysql_store_result(h);
    mysql_free_result(res);
  }
  while ( (0 == mysql_next_result(h)) ); 

}
void test_proc_stmt(MYSQL* h)
{
  MYSQL* mysql_ = h;
  MYSQL_BIND     bind;
  MYSQL_BIND     obind[1];
  // test_more_results(mysql_);
  MYSQL_STMT *hStmt = mysql_stmt_init(mysql_);
  my_bool true_value= 1;
  mysql_stmt_attr_set(hStmt, STMT_ATTR_UPDATE_MAX_LENGTH, (void*) &true_value);
  char sql[] = "call get_t(?)";
  //char sql[] = "select id from t where id=?";
  if (mysql_stmt_prepare(hStmt, sql, strlen(sql)))
  {
    std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl;
    mysql_stmt_reset(hStmt);
    if (mysql_stmt_prepare(hStmt, sql, strlen(sql)))
    {
      std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl;
      mysql_close(mysql_);
      exit( -1);
    }
  }
  int id = 1;
  unsigned long id_len = 0;
  memset(&bind, 0, sizeof(bind));
  bind.buffer_type = FIELD_TYPE_LONG;
  bind.buffer = (void*)&id;
  bind.is_unsigned = true;
  bind.length = &id_len;
  // bind[0].buffer_length = sizeof(id);
  // bind[0].is_null = 0; 

  if (mysql_stmt_bind_param(hStmt,(MYSQL_BIND*)(&bind)) != 0)
  {
    std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl;
    mysql_close(mysql_);
    exit( -1);
  }
  if (mysql_stmt_execute(hStmt) != 0)
  {
    std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl;
    mysql_close(mysql_);
    exit( -1);
  }
  int t2;
  memset(obind, 0, sizeof(obind));
  obind[0].buffer_type= MYSQL_TYPE_LONG;
  obind[0].buffer= (char *)&t2;
  obind[0].buffer_length = sizeof(t2); 

  if (mysql_stmt_bind_result(hStmt, (MYSQL_BIND*)&obind[0]) != 0)
  {
    std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl;
    mysql_close(mysql_);
    exit( -1);
  }
  if ( mysql_stmt_store_result(hStmt) != 0 )
  {
    std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl;
    mysql_close(mysql_);
    exit( -1);
  } 

  int rows = mysql_stmt_num_rows(hStmt);
  for (int i=0; i<rows; i++)
  {
    if (mysql_stmt_fetch(hStmt) == 0)
    {
      std::cout<<"id = "<<t2<<std::endl;
    }
  }
  mysql_stmt_free_result(hStmt);
  mysql_stmt_close(hStmt);
}
//
// Just for demo only.
//
int main()
{
  MYSQL*       mysql_ = NULL;
  MYSQL_RES*     result_ = NULL;
  MYSQL_ROW      row_;
  mysql_ = mysql_init(mysql_);
  // if (mysql_real_connect(mysql_, host, user, passwd, db, 3306, NULL, CLIENT_MULTI_STATEMENTS) == NULL)
  if (mysql_real_connect(mysql_, host, user, passwd, db, 3306, NULL, CLIENT_MULTI_STATEMENTS) == NULL)
  {
    const char * error = mysql_error(mysql_);
    std::cout<<"*** Connection Error " << error << std::endl;
    return -1;
  }
  mysql_autocommit(mysql_, false);
  std::string encodeStr = "set names 'gbk'";
  mysql_real_query(mysql_, encodeStr.c_str(), encodeStr.size()); 

  /*
  const char* tmpTableName = "t"; // assume you are querying the table 't'
  char str[512];
  int cnt = 0;
  sprintf(str,"select count(*) as cnt from %s", tmpTableName);
  mysql_real_query(mysql_, str, strlen(str));
  result_ = mysql_store_result(mysql_);
  while (row_ = mysql_fetch_row(result_))
  {
    // get the field value
    if (row_[0])
    {
      std::cout<<"count = "<<row_[0]<<std::endl;
      // convert it into int
      cnt = atoi(row_[0]);
      std::cout<<"cnt value = "<<row_[0]<<std::endl;
    }
  }
  mysql_free_result(result_);
  test_more_results();
  */
  test_proc_stmt(mysql_); 

  do
  {
    MYSQL_RES* res = mysql_store_result(mysql_);
    mysql_free_result(res);
  }
  while ( (0 == mysql_next_result(mysql_)) ); 

  test_proc_stmt(mysql_);
  mysql_close(mysql_);
  return 0;
} 

这样就差不多了,大家可以根据需要选择。

(0)

相关推荐

  • 浅析c++ 中const关键字

    const是一个C++语言的限定符,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性.另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助. define与const的区别 1.define作用在预处理时,是简单地字符替换 2. const作用在编译时,具有类型检查的功能 3. const必须进行初始化 常量指针与指针常量 #include <iostream> using std::endl; using std::cout

  • C/C++ 连接MySql数据库的方法

    一.VS2008工程设置工作 首先,建立一个windows应用程序的工程,将C/C++->预处理器->预处理器定义下的_WINDOWS改为_CONSOLE, 将连接器->系统->子系统 选择为控制台. 由于我们要使用Mysql的API,并且我们机子上肯定安装了Mysql数据库,所以我们要将工程的头文件路径指向Mysql安装目录的同文件mysql.h所在的位置,将连接库路径指向libmysql.lib所在的路径, 在我的机子上,Mysql 的安装路径为:C:\Program File

  • C++ 虚函数的详解及简单实例

    C++ 虚函数的详解 虚函数的使用和纯虚函数的使用. 虚函数是在基类定义,然后子类重写这个函数后,基类的指针指向子类的对象,可以调用这个函数,这个函数同时保留这子类重写的功能. 纯虚函数是可以不用在基类定义,只需要声明就可以了,然后因为是纯虚函数,是不能产生基类的对象,但是可以产生基类的指针. 纯虚函数和虚函数最主要的区别在于,纯虚函数所在的基类是不能产生对象的,而虚函数的基类是可以产生对象的. // pointers to base class #include <iostream> usi

  • C++ 类的继承与派生实例详解

     C++ 类的继承与派生实例详解 继承性是面向对象程序设计最重要的特性之一,使软件有了可重用性,C++提供的类的继承机制. 继承与派生的概念 一个新类从已有的类那里获得已有的特性,这种现象称为类的继承.同样也可以说成已有的类派生出来了新的类.类A继承自类B也就是类B派生了类A.所以继承和派生的关系就像小学时把字句和被字句的造句一样.有了继承与派生后,就有了父类/基类与子类/派生类,C++中将类B称为父类/基类,将类A称为子类/派生类. 派生类的声明: #include <iostream> u

  • C++ 数字的反转实现实例

    数字的反转 (144)  (0) Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 备注:当数字溢出时,则程序返回0. 解题思路: 1.用一个变量y(初始化为0)保存改变之后的值: 2.将x的个位取下来,并且y乘上10,然后对加上x; 3.判断y-x的个位除以10,时候等于变量y(防止数字溢出),如果不等于则返回0: 4.将x等于x除以10,进一位: 5.当x存在

  • C++连接mysql的方法(直接调用C-API)

    我装的是5.1版本,需要的头文件有 把需要的文件添加进去,然后再把 libmysql.lib放到项目目录里,文件在mysql安装目录 lib 下面. #include "stdafx.h" #include <iostream> #include <winsock2.h> #include "mysql.h" //#pragma comment(lib, "ws2_32.lib") #pragma comment(lib,

  • nodeJs实现基于连接池连接mysql的方法示例

    本文实例讲述了nodeJs实现基于连接池连接mysql的方法.分享给大家供大家参考,具体如下: mysql.js //连接数据库 var mysql = require('mysql'); var pool = mysql.createPool({ host: 'localhost', user: 'root', password: 'gfdfsdf34r34r', database:'caiji' }); module.exports = function(sql, callback) { p

  • PHP连接MySql数据库方法简化版

    写这个PHP连接数据库静态工具类之前,是由于当时学习C#的asp.net.老师编写了一个连接数据库的静态工具类,发现使用此类,每次只需要写sql语句,而不再需要进行连接创建,关闭等等.方便其他操作,节约时间. 转眼一年半,如今php课程需要写一个小项目,于是第一件事就是编写一个连接数据库的静态工具类,php和asp.net的语法极其的相似. 在使用此类之前,可以普及两点知识: PHP中使用静态的调用,不同于其他编程语言,它的静态调用为: 类名::$静态属性 类名::静态方法() 而Java.C#

  • C#连接mysql的方法【基于vs2010】

    本文实例讲述了C#连接mysql的方法.分享给大家供大家参考,具体如下: 在vs2010中  工具->数据库连接   里要想连接到MySQL数据库,需要安装这样一个东西: MySql Connector: 1.首先安装 connector .下载地址:(http://www.mysql.com/downloads/connector/net/) 2.现在就可以了,打开vs2010试试吧! 安装完成后找到安装目录下(C:\Program Files\MySQL\MySQL Connector Ne

  • 远程连接mysql 授权方法详解

    今在服务器上 有mysql 数据库,远程访问,不想公布root账户,所以,创建了demo账户,允许demo账户在任何地方都能访问mysql数据库中shandong库. 方案一: 在安装mysql的机器上运行: 1: 创建user用户 复制代码 代码如下: CREATE USER demo IDENTIFIED BY "123456" 2. 复制代码 代码如下: mysql>GRANT ALL PRIVILEGES ON shandong.* TO 'demo'@'%'WITH G

  • Node连接mysql数据库方法介绍

    使用Node做Web开发,基本上都是使用NoSQL数据库,最频繁的就是使用MongoDB了,自己做了一些简单的Web开发,为了降低学习门槛,一直使用MySQL来做数据库.这里简单介绍一下连接MySQL数据库的方式,希望能帮助到其他人. npm install --save mysql 使用上述命令安装完MySQL的模块后,就可以直接使用了,官网的DOCS里一个简单的例子如下就可以入门了. var mysql = require('mysql'); var connection = mysql.c

  • django连接mysql配置方法总结(推荐)

    最近在学习django,学到第五章模型时,需要连接数据库,然后,在这里分享一下方法. 起初是不知道怎样配置mysql数据库,但是还好,django的官网上面有相关的配置方法,下面就直接给分享一下. 这是settings文件里面的基础配置,使用的是sqlite,那我们需要连接其他数据库呢? DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'mydatabase', } } 下面是mysql的配置方

  • IronPython连接MySQL的方法步骤

    原以为在IronPython中使用MySQL是一件很容易的事情,即使有麻烦,也可以改变路径,加载Python下的MySQL模块.事实证明,这是我一厢情愿的想法.要想在IronPython中连接MySQL数据库,必须要调用MySql.Data动态库--这个dll很容易在网上找到,但如何使用这个库,网上的资料如凤毛麟角,难觅其踪.好不容易找到几篇,却又语焉不详,不知所云. 经过好一番折腾,终于搞明白了MySql.Data.dll的用法. 1. 导入模块 import clr clr.AddRefer

  • node.js通过Sequelize 连接MySQL的方法

    一.通过koa2脚手架构建项目 1.1 安装koa-generator 在终端输入: $ npm install -g koa-generator 1.2 使用koa-generator生成koa2项目 $ koa2 HelloKoa2 成功创建项目后,进入项目目录,并执行npm install命令 $ cd HelloKoa2 $ npm install 1.3 启动项目 在终端输入: $ npm start 项目启动后,默认端口号是3000,在浏览器中运行可以得到下图的效果说明运行成功. 二

  • cmd连接mysql的方法详解

    连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样)断开:exit (回车) 创建授权:grant select on 数据库.* to 用户名@登录主机 identified by \"密码\"修改密码:mysqladmin -u用户名 -p旧密码 password 新密码删除授权: revoke select,insert,update,delete om *.* fromtest2@localhost; 显示数据库:show d

随机推荐