当前位置: 首页 > 图文教程 > 数据库 > MYSQL > MySQL 5 C API 访问数据库例子程序

MYSQL
使用mysql的mysqldump实现自动备份
MySQL数据导出和导入工具:mysqldump
怎样从Windows命令行启动您的MySQL
细化解析实现MySQL查询结果的分页显示
强大的工具 MySQL客户端命令行应用技巧
MySQL 5.0.16中出现乱码问题的解决方法
phpMyBackupPro备份恢复Mysql数据库
如何才能关闭MySQL数据库中错误提示音
数据库竟然崩溃了!马上让它恢复正常!
怎么显示 MySQL 数据库里表的概要呢?
自动恢复MySQL数据库的日志文件全教程
实例解说MySQL数据库中文问题的解决方案
优化MySQL数据库性能的几招儿好办法
MySQL加密函数保护Web网站敏感数据
使用PHP小程序清除Mysql中恼人的死连接
Mysql中用utf8存储而用gbk输出的实现
浅谈怎么才能在MySQL中直接储存图片
用特殊的MySQL运算符获得更多数据比较功能
MySQL数据库中的重要资料需要怎样保护?
假如忘记MySQL root密码应当怎样找回

MYSQL 中的 MySQL 5 C API 访问数据库例子程序


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 93 ::
收藏到网摘: n/a

 

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

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


/*****************************************************************/
///name     : main
//function   : 主测试函数
//access     : private
//para     :
//       1. : int argc
//         : 系统参数个数
//       2. : char * argv[]
//         : 参数数值
//return     : 返回给 startup 函数的退出参数
//author     : hzh
//date     : 2006-06-24
/*****************************************************************/
int main( int argc, char * argv[] )
{
MYSQL mydata;

//初始化数据结构
if(mysql_init(&mydata) == NULL)
{
std::cout<<"init mysql data stauct fail"<<endl;
return -1;
}

//连接数据库
if(argc == 1)
{
if(NULL == mysql_real_connect(&mydata,"127.0.0.1","root","mysql5",
  "hzhdb",MYSQL_PORT,NULL,0))
{
  std::cout<<"connect database fail"<<endl<<mysql_error(&mydata)<<endl;
  return -1;
}
}else if(argc == 5)
{
if(NULL == mysql_real_connect(&mydata,argv[1],
  argv[2],argv[3],argv[4],MYSQL_PORT,NULL,0))
{
  std::cout<<"connect database fail"<<endl<<mysql_error(&mydata)<<endl;
  return -1;
}
}
else
{
std::cout<<"run parameter error"<<endl;
return -1;
}

std::string s_sql = "drop table hzhtest";
if(mysql_query(&mydata,s_sql.c_str()) != 0)
{
//删除表失败
mysql_close(&mydata);
std::cout<<"drop table fail"<<endl<<mysql_error(&mydata)<<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)
{
//创建表失败
mysql_close(&mydata);
std::cout<<"create table fail"<<endl
  <<mysql_error(&mydata)<<endl;
return -1;
}

//向表中插入数据
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<<mysql_error(&mydata)<<endl;
  mysql_close(&mydata) ;
  return -1;
}
}

//查询数据并显示
s_sql = "select myid,mytime,myname from hzhtest";
if(mysql_query(&mydata,s_sql.c_str()) != 0)
{
//执行SQL语句出错
mysql_close(&mydata);
std::cout<<"execute sql syntax fail"<<
  endl<<mysql_error(&mydata)<<endl;
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 ? currrow : "NULL")<<"\t";
}
std::cout<<endl;
}

mysql_free_result(result) ;
mysql_close(&mydata);

system("pause");

return 1;
}