`

收藏:MySQL 5 C API 访问数据库例子程序

    博客分类:
  • C++
阅读更多
/*****************************************************************
以下是研究 mysql 5.0 得出的结果,描述并使用标准 c++演示了使用 MySQL
 C API 函数 简单操作数据库的流程;
 例子程序在 VC6 + windows 2000 上调试通过
*****************************************************************/
#include <windows.h> 
#include <iostream>
#include <mysql.h> //文件位于 MySQL 提供的 C API 目录(include)中
using namespace std;

// linux 等系统中请加入 -lmysql -I/usr/local/mysql/inlucde
#pragma comment( lib, "libmysql.lib")

class CMysqlConnect
{
private:
 //一个连接
 MYSQL *m_connmysql;
 std::string m_err;
protected:
 //
public:
 CMysqlConnect(const std::string &host,
            const std::string &user,
            const std::string &password,
      const std::string &dbname,
      unsigned int port);
 ~CMysqlConnect();
 //bool 
 //得到连接
 MYSQL * GetConnect();

 //得到错误消息
 const std::string What();
};

CMysqlConnect::CMysqlConnect(const std::string &host,
            const std::string &user,
            const std::string &password,
      const std::string &dbname,
      unsigned int port = MYSQL_PORT):m_connmysql(NULL)
{
 //初始化数据结构
 if((m_connmysql = mysql_init(m_connmysql)) == NULL)
 {
  return;
 }

 if(NULL == mysql_real_connect(m_connmysql,host.c_str(),
  user.c_str(),password.c_str(),dbname.c_str(),port,NULL,0))
 {
  m_err = mysql_error(m_connmysql);
  return ;
 }
}


CMysqlConnect::~CMysqlConnect()
{
 if(m_connmysql)
 {
  mysql_close(m_connmysql);
  m_connmysql = NULL;
 }
}


//得到连接
MYSQL * CMysqlConnect::GetConnect()
{
 if(m_connmysql == NULL)
 {
  //throw std::logic_error("db not connect");
 }

 //还需要判断是否能自动重新连接

 return m_connmysql;
}

 //得到错误消息
const std::string CMysqlConnect::What()
{
 return m_err;
}

/*****************************************************************/
///name       : main
//function    : 主测试函数
//access      : public
//para        : 
//         1. : int argc
//            : 系统参数个数
//         2. : char * argv[]
//            : 参数数值
//return      : 返回给 startup 函数的退出参数
//author      : hzh
//date        : 2006-06-24
/*****************************************************************/
int main( int argc, char * argv[] ) 
{   
 CMysqlConnect *myconn = NULL;  
 
 //连接数据库
 if(argc == 1)
 {
  myconn = new CMysqlConnect("127.0.0.1","root","mysql5",
   "test",MYSQL_PORT);
  if(myconn == NULL)
  {
   std::cout<<"allocate memory exception"<<endl;
   return -1;
  }
  if(myconn->GetConnect() == NULL)
  {
   std::cout<<"connect database fail"<<
    endl<<myconn->What().c_str()<<endl;
   return -1;
  }
 }else if(argc == 6)
 {
  myconn = new CMysqlConnect(argv[1],argv[2],argv[3],argv[4],atoi(argv[5]));
  if(myconn == NULL)
  {
   std::cout<<"allocate memory exception"<<endl;
   return -1;
  }
  if(NULL == myconn->GetConnect())
  {
   std::cout<<"connect database fail"<<endl<<
    myconn->What().c_str()<<endl;
   return -1;
  }
 }
 else
 {
  std::cout<<"run parameter error"<<endl;
  return -1;
 }

 MYSQL *mydata = myconn->GetConnect();

 //先删除数据表
 std::string s_sql = "drop table hzhtest";
 if(mysql_query(mydata,s_sql.c_str()) != 0)
 {
  //删除表失败
  std::cout<<"drop table fail"<<endl<<mysql_error(mydata)<<endl;
 }
 else
 {
  std::cout<<"drop table success"<<endl;
 }

 //创建数据表,字段 myid 设置了自增列属性
 s_sql = "create table hzhtest(";
 s_sql += "myid integer not null auto_increment,";
 s_sql += "mytime datetime null,myname varchar(30),";
 s_sql += " primary key(myid))";
 if(mysql_query(mydata,s_sql.c_str()) != 0)
 {
  //创建表失败
  std::cout<<"create table fail"<<endl;
  return -1;
 }
 else
 {
  std::cout<<"create table success"<<endl;
  std::cout<<s_sql.c_str()<<endl;
 }

 //向表中插入数据
 for(int k = 1; k < 30; ++k)
 {
  s_sql = "insert into hzhtest(mytime,myname) values";
  s_sql += "('2006-06-";
  char buff[20];
  memset(buff,0,sizeof(buff));
  itoa(k,buff,10);
  s_sql += buff;
  
  s_sql += " ";

  int i = k % 3;
  memset(buff,0,sizeof(buff));
  itoa(i,buff,10);
  s_sql += buff;
  s_sql += ":01:01'";

  if(i == 0)
  {
   s_sql += ",NULL";
  }
  else
  {
   s_sql += ",'中文显示测试";
   s_sql += buff;
   s_sql += "'";
  }
  s_sql += ")";

  if(mysql_query(mydata,s_sql.c_str()) != 0)
  {
   //执行SQL语句出错 
   std::cout<<"execute insert syntax fail"<<endl;
   return -1;
  } 
 }
 std::cout<<"insert data success"<<endl;

 //查询数据并显示
 s_sql = "select myid,mytime,myname from hzhtest";
 if(mysql_query(mydata,s_sql.c_str()) != 0)
 {
  //执行SQL语句出错 
  return -1;
 }  
 
 MYSQL_RES *result = mysql_store_result(mydata); 

 //取得查询结果 
 int rowcount = mysql_num_rows(result); 
 //取得有效记录数 
 std::cout<<"exec sql: "<<s_sql.c_str()<<
  ",row count: "<<rowcount<<endl;

 MYSQL_FIELD *fields = NULL; 
 //取得各字段名 
 for(int i = 0; fields = mysql_fetch_field(result);++i)
 {
  std::cout<<fields->name<<"\t\t";
 }
 std::cout<<endl;
   
 //依次读取各条记录 
 MYSQL_ROW currrow = NULL;
 while((currrow = mysql_fetch_row(result)) != NULL)
 {
  //读行的记录
  for(int i = 0; i < mysql_num_fields(result); ++i)
  {
   std::cout<<(currrow[i] ? currrow[i] : "NULL")<<"\t";
  }
  std::cout<<endl;
 }
 mysql_free_result(result) ; 

 system("pause");
 return 1;
}





Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=829502
分享到:
评论

相关推荐

    MySQL API连接数据库

    VC6.0下通过MySQL API连接mysql数据库,只需在VC中配置对应环境,代码就能直接运行

    MYSQL C API 访问程序

    1. 以下是研究 mysql 5.0.22 得出的结果,描述并使用标准 c++演示了使用 MySQLC API 函数 简单操作数据库的流程; 例子程序在 VC6(VC7.1) + windows 2000 上调试通过; 例子程序在 red hat linux 9,red fc6 上调试通过 ...

    EFcore连接本地Mysql数据库使用ASP.NET.CORE.API

    1.实现EFcore连接本地Mysql数据库 2.最新版本的ASP.NET.CORE.Web API 3.实现dbfrist和code 。 4.博客链接:https://blog.csdn.net/EAyayaya/article/details/124048491 5. 不是MVC方式 6.Entity Framework Core ...

    vc中使用mysql api连接数据库的几个例子

    vc中使用mysql api连接数据库的几个例子,大家放心,都是可以成功运行的,并不需要设置数据源什么的。

    C语言下 Mysql的C_API的操作及应用.rar

    在centos下进行的mysql相关的的C_API的操作说明和应用及源码例子 涉及方面: 1.centos下mysql数据库的安装 2.sql语句 3.非预处理API 4.预处理API 5.C-API的应用代码 6.Makefile 7.编译结果及遇到的错误分析

    JS直接访问数据Mysql

    javascript脚本直接访问MySQL数据库

    :rocket:一个用于为任何MySql数据库生成REST API的命令。-Node.js开发

    Xmysql:一个命令可以为任何MySql数据库生成REST API,为什么呢? 为不遵循Rails,django,laravel等框架约定的MySql数据库生成REST API是sm Xmysql:一个为任何MySql数据库生成REST API的命令。 为MySql数据库生成...

    VC++通过API连接MySQL数据库

    VC++通过API连接MySQL——这篇文章主要讲述使用vc++通过api连接mysql数据库的过程,文中通过一个例子讲述连接并操作mysql数据库。亲自操作过之后,再重新整理的文档,希望对初学者有帮助。

    Python基于DB-API操作MySQL数据库过程解析

    Python提供了一个标准数据库API,称为DB-API,用于处理基于SQL...使用DB-API操作MySQL数据库例子 1、Windows安装MySQL数据库驱动程序MySQL-Connector/Python 访问MySQL-Connector/Python官网地址:https://dev.mysql

    MySql C API 的 C++ 包装

    此代码是研究 mysql 5.0.22 得出的结果,描述并使用标准 c++演示了使用 MySQLC API 函数简单操作数据库的流程; 例子程序在 VC6(VC7.1) + windows 2000 上调试通过; 例子程序在 red hat linux 9,red fc6 上调试通过

    MySQL 5.1官方简体中文参考手册

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. ...

    MySql 5.1 参考手册.chm

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. ...

    MySQL 5.1中文手冊

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. ...

    MYSQL

    11 MySQL 基准套件 12 MySQL 实用程序 12.1 各种 MySQL 程序概述 12.2 管理一个 MySQL 服务器 12.3 从 MySQL 数据库和表中倒出(dump)结构和数据 12.4 从文本文件导入数据 12.5 MySQL ...

    MySQL 5.1参考手册

    MySQL 5.1参考手册.chm 前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL...

    MySQL 5.1参考手册 (中文版)

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. ...

    MySQL 5.1参考手册中文版

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? ...

    MySQL中文参考手册.chm

    11 MySQL 基准套件 12 MySQL 实用程序 12.1 各种 MySQL 程序概述 12.2 管理一个 MySQL 服务器 12.3 从 MySQL 数据库和表中倒出(dump)结构和数据 12.4 从文本文件导入数据 12.5 ...

    MYSQL中文手册

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? ...

Global site tag (gtag.js) - Google Analytics