`

收藏: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环境下,我们可以利用MFC(Microsoft Foundation Classes)库来构建C++应用程序,并通过MySQL API实现对MySQL数据库的连接、查询和其他操作。以下是关于这个主题的详细知识: 1. **MySQL API介绍** - MySQL...

    linux下使用libmysql++库操作mysql的C API.docx

    本文档主要介绍了在 Linux 平台下使用 libmysql++ 库操作 MySQL 数据库的 C 语言 API。首先,需要在 Ubuntu 12.04 环境下安装 MySQL 服务器,可以通过 apt-get 安装。然后,介绍了 MySQL 的基本命令,包括显示数据库...

    MYSQL C API 访问程序

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

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

    在VC++环境中,使用MySQL API连接数据库是一种常见的方式,尤其对于开发C++应用程序时需要与MySQL数据库进行交互的情况。MySQL API提供了丰富的函数和结构,使得开发者可以直接在代码中执行SQL语句,处理结果集,...

    使用C语言控制台结合mysql数据库实现简单的图书管理系统.doc

    而`mysql.h`是MySQL C API的头文件,包含了与MySQL数据库交互所需的所有函数和结构体。 在`userfunction`函数中,用户被欢迎登录并可以选择不同的操作,例如借阅、归还图书或者查询图书。这些功能的实现依赖于MySQL...

    android连接mysql数据库例子

    不过,值得注意的是,由于Android应用直接访问远程数据库可能引发安全问题,因此在生产环境中,通常推荐使用更安全的云数据库服务,如Firebase Realtime Database或Firestore,或者自建的RESTful API。

    第一个EJB访问数据库例子

    综上所述,"第一个EJB访问数据库例子"这个项目将引导我们了解如何在EJB环境中设置和使用数据库连接,以及如何通过EJB组件执行SQL查询和操作。这个过程中,我们将涉及JDBC、JNDI、EJB组件类型、事务管理以及可能的JPA...

    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 ...

    C语言访问Mysql 增删改查小例子代码.rar

    C语言与MySQL数据库进行交互通常需要使用MySQL的C API。下面我将提供一个简单的C语言示例,展示如何使用MySQL C API进行基本的增删改查操作。请注意,这个示例假设你已经安装了MySQL数据库,并且已经配置了相应的...

    MySQL数据库存取例子代码

    总之,这个例子代码展示了如何在C++环境下利用MySQL的C API进行数据库操作,涵盖了数据库连接、SQL语句执行、结果集处理等基础但重要的知识点,对于学习数据库编程和MFC应用开发的初学者来说是非常有价值的参考资料...

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

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

    MySQL_API中文手册

    - MySQL API主要包括C API,它是一个C语言接口,适用于大多数编程环境。 - API提供了连接到服务器、发送SQL语句、接收结果和处理数据的基本函数,如`mysql_connect()`、`mysql_query()`、`mysql_fetch_row()`等。 ...

    c语言网站代码(mysql数据库)

    3. MySQL数据库:掌握基本的SQL语法,如CRUD操作,以及如何使用C语言API连接和操作MySQL数据库。 4. Web服务器配置:如何设置Web服务器以支持CGI,并部署CGI程序。 5. 安全性:了解如何在处理用户输入时防止SQL注入...

    C++访问MySQL

    1. **C++与MySQL连接**:C++通过MySQL C API来访问MySQL数据库。`#include &lt;mysql/mysql.h&gt;`引入了必要的头文件,提供了连接、查询和其他数据库操作的接口。 2. **MYSQL数据结构**:`MYSQL`是MySQL C API中的一个...

    C++MYSQL API封装类及应用例子

    MySQL API是一组C语言编写的函数,它允许程序员通过C++或其他支持C接口的语言与MySQL服务器通信。这些函数包括连接、断开连接、执行SQL语句、处理结果集等功能。 封装MySQL API到C++类中,通常会包含以下核心部分:...

    数据库技术例子详细讲解

    - ODBC(Open Database Connectivity):提供统一的API,使得应用程序可以访问多种SQL数据库,通过驱动程序管理器连接到特定的DBMS。 - DAO(Data Access Objects):Microsoft开发的接口,主要用于Access数据库,...

    连接mysql数据库的驱动包:mysql-connector-java-5.1.39.jar

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Web应用程序中广泛应用。为了在Java环境中与MySQL数据库进行交互,我们需要一个特定的驱动程序,这就是`mysql-connector-java-5.1.39.jar`的作用。这个JAR...

    java连接MySql、SqlServer数据库实例

    在IT行业中,数据库连接是应用程序开发中的重要环节,特别是对于Java开发者来说,理解如何与不同的数据库系统如MySQL和SQL Server进行交互是至关重要的。本文将深入探讨如何使用Java语言连接这两种广泛使用的数据库...

Global site tag (gtag.js) - Google Analytics