文档章节

linux(ubuntu)下C++访问mysql数据库

菅超鹏
 菅超鹏
发布于 2014/06/09 18:00
字数 706
阅读 263
收藏 0
  1. Ubuntu安装msyql

    1. 安装mysql数据库

      sudo apt-get install mysql-server
    2. 安装mysql客户端

      sudo apt-get install mysql-client
  2. C API的基本类型

    1. MYSQL

      1. 该结构代表1个数据库连接的句柄.

      2. 几乎所有的MySQL函数均使用它.

      3. 不应尝试拷贝MYSQL结构, 不保证这类拷贝结果会有用.

    2. MYSQL_RES

      1. 该结构代表返回行的查询结果

    3. MYSQL_ROW

      1. 这是1行数据的“类型安全”表示。它目前是按照计数字节字符串的数组实施的。

      2. 行是通过调用mysql_fetch_row()获得的。

    4. 官方文档地址 

      1. http://dev.mysql.com/doc/refman/5.1/zh/apis.html#c
  3. 代码

    1. 向表中插入(删除)一条数据

      #include <iostream>
      #include <mysql/mysql.h>
      
      using namespace std;
      
      int main(int argc, char* argv[])
      {
          //准备mysql的访问结构
          MYSQL mysql;
          mysql_init( &mysql );
       
          mysql_real_connect(
              &mysql,
              "192.168.16.114",	//要访问数据库的IP地址
              "root",			//用户名
              "root",			//密码
              "test",			//要访问的数据库
              3306,			//该数据库的端口
              NULL,			//一般为NULL
              0			//一般为0
          ); 
       
          //插入 
          string sql = "insert into student value(1, 'jp', 24, 'gzjd')";
       
          //删除
          //string sql = "delete from student where id = 33";
       
          //执行sql语句
          mysql_query( &mysql, sql.c_str() ); 
      
          //关闭数据库连接
          mysql_close( &mysql );
      
          return 0;
      }
      
      //编译
          //g++ file.cpp -o target -lmysqlclient
      
      //执行
          //./target
      
      //验证
          //成功
    2. 更新表内容

      #include <iostream>
      #include <mysql/mysql.h>
      
      using namespace std;
      
      int main(int argc, char* argv[])
      {
      	MYSQL mysql;
      	mysql_init( &mysql );
      	
      	mysql_real_connect(
      		&mysql,
      		"192.168.16.114",
      		"root",
      		"root",
      		"test",
      		3306,
      		NULL,
      		0
      	);
      
      	string sql = "update student set name = 'pj' where id = 2";
      
      	mysql_query( &mysql, sql.c_str() ); 
          
              mysql_close(&mysql);
              
              return 0;
      }
    3. 调用存储过程

      #include <iostream>
      #include <mysql/mysql.h>
      
      using namespace std;
      
      int main(int argc, char* argv[])
      {
      	MYSQL mysql;
      	mysql_init( &mysql );
      	
      	mysql_real_connect(
      		&mysql,
      		"192.168.16.114",
      		"root",
      		"root",
      		"test",
      		3306,
      		NULL,
      		0	
      	);	
      
      	string sql = "call myPorc();";
      	int ret = mysql_query( &mysql, sql.c_str() );
      	
      //      debug info
      //	cout << mysql_error( &mysql );
      //	cout << ret << endl;
      
      	mysql_close(&mysql);
      
      	return 0;
      }
    4. 查询数据表的内容

      #include <iostream>
      #include <mysql/mysql.h>
      
      using namespace std;
      
      int main(int argc, char* argv[])
      {
      	MYSQL mysql;
      	mysql_init( &mysql );
      	mysql_real_connect(
      		&mysql,
      		"192.168.16.114",
      		"root",
      		"root",
      		"test",
      		3306,
      		NULL,
      		0	
      	);
      
      	string sql = "select * from student";
      	mysql_query( &mysql, sql.c_str() );
      	
      	MYSQL_RES *result = NULL;
      	result = mysql_store_result( &mysql );
      	
      	//得到查询出来所有数据的条数
      	int row_count = mysql_num_rows( result );
      	cout << "all data number: " << row_count << endl;
      
      	//得到字段的个数和字段的名字
      	int field_count = mysql_num_fields( result );
      	cout << "field count : " << field_count << endl;
      
      	//得到所有字段的名字
      	MYSQL_FIELD* field = NULL;
      	for( int i = 0; i < field_count; ++i)
      	{
      		field = mysql_fetch_field_direct( result, i );
      		cout << field->name << "\t";
      	}
      	cout << endl;
      
      	//显示表中的所有数据
      	MYSQL_ROW row = NULL;
      	row = mysql_fetch_row( result );
      	while ( NULL != row )
      	{
      		for( int i = 0; i < field_count; ++i)
      		{
      			cout << row[i] << "\t";
      		}
      		cout << endl;
      
      		row = mysql_fetch_row( result );
      	}
         
          mysql_free_result(result);
      
          mysql_close( &mysql );
      	
      	return 0;
      }
    5. 得到指定数据库test中的所有表

      #include <iostream>
      #include <string>
      #include <vector>
      #include <mysql/mysql.h>
      
      using namespace std;
      
      int main(int argc, char* argv[])
      {
      	//定义一个数据库连接句柄
      	MYSQL mysql;
      	
      	//对数据句柄进行初始化
      	mysql_init( &mysql );
      
      	//连接数据库
      	mysql_real_connect(
      		&mysql,
      		"192.168.16.114",
      		"root",
      		"root",
      		"test",
      		3306,
      		NULL,
      		0
      	);
      
      	//查询数据库
      	string sql = "show tables;";
      	
      	mysql_query( &mysql, sql.c_str() ); 
      
      	MYSQL_RES *result = NULL;
      	result = mysql_store_result( &mysql );
      
      	//得到查询出来所有数据记录的数量
      	vector<string> allTable;
      	MYSQL_ROW row = mysql_fetch_row( result );
      	while( NULL != row )
      	{
      		allTable.push_back( row[0] );
      		row = mysql_fetch_row( result );
      	}
      
      	for(vector<string>::const_iterator cit = allTable.begin(); cit != allTable.end(); ++cit )
      	{
      		cout << *cit << "\t";
      	}
      	cout << endl;
      	
      	mysql_free_result( result );
      	
      	mysql_close( &mysql );
      	
      	return 0;
      }



© 著作权归作者所有

共有 人打赏支持
菅超鹏
粉丝 0
博文 10
码字总数 2856
作品 0
广州
程序员
私信 提问
oos 0.2.1 发布, C++ 的 ORM 框架

oos 0.2.1 发布,这是个 bug 修复版本,修复了 Ubuntu 13.10 的构建问题;移除了不必要的代码;改进了错误处理。 OOS 是一个 C++ 的 ORM 框架。旨在封装所有数据库后端功能,并对开发者提供统...

oschina
2014/01/16
1K
5
Linux C++、Boost、ACE ......

Linux/UNIX、C++、Boost、ACE、Shell ...... Linux/UNIX C++高级培训---远程班 * 培养目标:Linux/UNIX C++高级软件工程师 专注Linux/UNIX服务器端的软件开发(后台开发),培养企业所需的专...

athxy
2010/04/01
729
1
Linux c++

Linux/UNIX、C++、Boost、ACE... * 培养目标:Linux/UNIX C++高级软件工程师 专注Linux/UNIX服务器端的软件开发(后台开发),培养企业所需的专业Linux/UNIX C++高级软件工程师。 课程涉及服...

athxy
2010/06/06
4.3K
5
Linux开放实验室

简介 为方便广大Linux软件开发爱好者,轩辕高端IT培训中心于2009年10月设立了Linux开放实验室,轩辕Linux开放实验室提供了完整的 Linux软件开发环境,包括:Redhat Enterprise Linux 5.4、C...

athxy
2010/04/01
283
0
OOS 0.2.0 发布,C++ 的 ORM 框架

OOS 0.2.0 发布,此版本添加了对 MS SQL Server 的支持;改进了 MySQL 后端的性能;修复了一些 bug。 OOS 是一个 C++ 的 ORM 框架。旨在封装所有数据库后端功能,并对开发者提供统一的访问 ...

oschina
2014/01/11
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊flink的Table API及SQL Programs

序 本文主要研究一下flink的Table API及SQL Programs 实例 // for batch programs use ExecutionEnvironment instead of StreamExecutionEnvironmentStreamExecutionEnvironment env = Stre......

go4it
19分钟前
0
0
mysqldump应用

备份单个库/表数据或库/表结构 命令行下具体用法如下: mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 备份文件名 1、导出数据库为dbname的表结构(其中用戶名為root,密码为dbpasswd,生成的...

阿dai
27分钟前
0
0
shell脚本与Python的交互

1、Python针对shell获取传入,输出参数 传入:"$num" 例如: $0表示文件名,$1表示shell获取的第一个参数 输出:通过打印shell结果的方式,输出参数给Python。 例如: echo "{$iplist}",Python调...

一口今心
30分钟前
0
0
Euler 今日问世!国内首个工业级的图深度学习开源框架,阿里妈妈造

阿里妹导读:千呼万唤始出来!阿里妈妈正式公布重磅开源项目——图深度学习框架Euler。这是国内首个在核心业务大规模应用后开源的图深度学习框架。此次开源,Euler内置了大量的算法供用户直接...

阿里云官方博客
37分钟前
0
0
TiDB 3.0 Beta Release Notes

2019 年 1 月 19 日,TiDB 发布 3.0 Beta 版,对应 master branch 的 TiDB-Ansible。相比 2.1 版本,该版本对系统稳定性、优化器、统计信息以及执行引擎做了很多改进。 TiDB 新特性 支持 Vi...

TiDB
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部