MySQL学习笔记_12_Linux下C++/C连接MySQL数据库(二) --返回数据的SQL



Linux下C++/C连接MySQL数据库(二)

--返回数据的SQL

引:

返回数据的SQL是指通过查询语句从数据库中取出满足条件的数据记录

从MySQL数据库值哦功能检索数据有4个步骤:

1)发出查询

2)检索数据

3)处理数据

4)整理所需要的数据

用mysql_query()发出查询,检索数据可以使用mysql_store_result()或mysql_use_result(),取决与怎样检索数据,接着是调用mysql_fetch_row()来处理数据,最后,还必须调用mysql_free_result()以允许MySQL进行必要的整理工作。

1、一次提取所有数据

[cpp] view plaincopyprint?

  1. MYSQL_RES *mysql_store_result(MYSQL * connection);
  2. //成功返回结构体指针,失败返回NULL
  3. my_ulonglong mysql_num_row(MYSQL_RES * result);
  4. //减速实际返回的行数
  5. MYSQL_ROW mysql_fetch_row(MYSQL_RES * result);
  6. //从mysql_store_result()中得到结果的结构体,并从中检索单个行,当没有更多的数据,或者出错时,返回NULL
  7. void mysql_free_result(MYSQL_RES * result);
  8. //使mySQL数据库整理分配的对象,关闭连接.
MYSQL_RES *mysql_store_result(MYSQL * connection);
//成功返回结构体指针,失败返回NULL
	my_ulonglong mysql_num_row(MYSQL_RES * result);
//减速实际返回的行数
	MYSQL_ROW mysql_fetch_row(MYSQL_RES * result);
//从mysql_store_result()中得到结果的结构体,并从中检索单个行,当没有更多的数据,或者出错时,返回NULL
	void mysql_free_result(MYSQL_RES * result);
//使mySQL数据库整理分配的对象,关闭连接.

示例:

[cpp] view plaincopyprint?

  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstdlib>
  4. #include <mysql/mysql.h>
  5. using namespace std;
  6. void mysql_err_function(MYSQL * connection);
  7. int main()
  8. {
  9. MYSQL * connection;
  10. connection = mysql_init(NULL);
  11. if (!connection)
  12. {
  13. mysql_err_function(connection);
  14. }
  15. connection = mysql_real_connect(connection,"localhost","root","123456","test",0,NULL,0);
  16. if (!connection)
  17. {
  18. mysql_err_function(connection);
  19. }
  20. cout << "Connection to MySQL Server is Success..." << endl;
  21. string query;
  22. getline(cin,query);
  23. int res = mysql_query(connection,query.c_str());
  24. if (res)
  25. {
  26. mysql_err_function(connection);
  27. }
  28. MYSQL_RES * my_res = mysql_store_result(connection);
  29. cout << "Retrieved " << mysql_num_rows(my_res) << "rows" << endl;
  30. MYSQL_ROW sqlrow;
  31. while ((sqlrow = mysql_fetch_row(my_res)))
  32. {
  33. cout << "Fetched data..." << endl;
  34. }
  35. mysql_free_result(my_res);
  36. mysql_close(connection);
  37. cout << "Connection to MySQL Server is closed!" << endl;
  38. return 0;
  39. }
  40. void mysql_err_function(MYSQL * connection)
  41. {
  42. if (mysql_errno(connection))
  43. {
  44. cout << "Error " << mysql_errno(connection) << " : "
  45. << mysql_error(connection) << endl;
  46. exit(-1);
  47. }
  48. }
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <mysql/mysql.h>
using namespace std;

void mysql_err_function(MYSQL * connection);

int main()
{
	MYSQL * connection;
	connection = mysql_init(NULL);

	if (!connection)
	{
		mysql_err_function(connection);
	}

    connection = mysql_real_connect(connection,"localhost","root","123456","test",0,NULL,0);

	if (!connection)
	{
		mysql_err_function(connection);
	}

	cout << "Connection to MySQL Server is Success..." << endl;
	string query;
	getline(cin,query);

	int res = mysql_query(connection,query.c_str());
	if (res)
	{
		mysql_err_function(connection);
	}

    MYSQL_RES * my_res = mysql_store_result(connection);

	cout << "Retrieved " << mysql_num_rows(my_res) << "rows" << endl;

	MYSQL_ROW sqlrow;
	while ((sqlrow = mysql_fetch_row(my_res)))
	{
		cout << "Fetched data..." << endl;
	}
	mysql_free_result(my_res);

	mysql_close(connection);
	cout << "Connection to MySQL Server is closed!" << endl;

	return 0;
}

void mysql_err_function(MYSQL * connection)
{
	if (mysql_errno(connection))
	{
		cout << "Error " << mysql_errno(connection) << " : "
		<< mysql_error(connection) << endl;

		exit(-1);
	}
}

2、一次提取一行数据,用于处理了大量的数据集

[cpp] view plaincopyprint?

  1. MYSQL_RES *mysql_use_result(MYSQL * connection);
  2. //成功返回结果集,失败返回NULL
MYSQL_RES *mysql_use_result(MYSQL * connection);
//成功返回结果集,失败返回NULL 

一次取全部数据增加了网络负载,增加了时延,但是可以保证数据的完整性。

示例:

[cpp] view plaincopyprint?

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <mysql/mysql.h>
  4. using namespace std;
  5. void mysql_err_function(MYSQL * connection);
  6. int main()
  7. {
  8. MYSQL * connection;
  9. connection = mysql_init(NULL);
  10. if (mysql_real_connect(connection,"localhost","root","123456","test",0,NULL,0))
  11. {
  12. cout << "Connection to MySQL Server is Succeed..." << endl;
  13. string query;
  14. getline(cin,query);
  15. int res = mysql_query(connection,query.c_str());
  16. if (res)
  17. {
  18. mysql_err_function(connection);//mysql_err_function()实现代码参考上例
  19. }
  20. else
  21. {
  22. MYSQL_RES * my_res = mysql_use_result(connection);
  23. if (my_res)
  24. {
  25. MYSQL_ROW sqlrow;
  26. while ((sqlrow = mysql_fetch_row(my_res)))
  27. {
  28. cout << "Fetching the Data..." << endl;
  29. }
  30. mysql_free_result(my_res);
  31. }
  32. else
  33. {
  34. mysql_err_function(connection);
  35. }
  36. }
  37. mysql_close(connection);
  38. cout << "Connection to MySQL Server is Closed!" << endl;
  39. }
  40. else
  41. {
  42. mysql_err_function(connection);
  43. }
  44. }
时间: 2024-08-04 18:29:20

MySQL学习笔记_12_Linux下C++/C连接MySQL数据库(二) --返回数据的SQL的相关文章

MySQL学习笔记_13_Linux下C++/C连接MySQL数据库(三) --处理返回数据

 Linux下C++/C连接MySQL数据库(三) --处理返回数据 一.通过返回结果集中的字段数 [cpp] view plaincopyprint? unsigned int mysql_field_count(MYSQL * connection); //将MYSQL_ROW的值作为一个存储了一行数据的数组... unsigned int mysql_field_count(MYSQL * connection); //将MYSQL_ROW的值作为一个存储了一行数据的数组... 示例:

MySQL学习笔记_11_Linux下C++/C连接MySQL数据库(一)

 Linux 下 C++/C 连接 MySQL 数据库(一) 一.连接前准备 原材料:Ubuntu12.04LTS (已经安装了MySQL5.5或者更高级版本,新立得软件包,gcc/g++或者CodeBlosks编译器) 安装了以上的软件包后,我们可以正常使用MySQL完成数据管理工作,但是很多时候我们需要通过编写程序访问MySQL.此时,在程序中需要加载MySQL驱动头文件,但是默认这些驱动包是没有安装的,因此我们需要在新立得中找到"libmysqld-dev"包并安装. 安装完

PHP学习笔记——PHP脚本和JAVA连接mysql数据库

环境 开发包:appserv-win32-2.5.10 服务器:Apache2.2 数据库:phpMyAdmin 语言:php5,java 平台:windows 10 java驱动:mysql-connector-java-5.1.37 需求 编写一个PHP脚本语言,连接到phpMyAdmin数据库的test库 编写一个java web服务端,连接到phpMyAdmin数据库的test库 代码 php连接方式 mysql.php <?php /**************************

MySQL学习笔记之八:使用Xtrabackup进行MySQL热备

xtrabackup是由percona提供的mysql数据库备份工具,是一款开源的能够对innodb和xtradb数据库进行热备的工具. xtrabackup对InnoDB支持热备,完全备份和增量备份:对MyISAM引擎支持温备,完全备份 一.特点: ①备份过程快速.可靠: ②备份过程不会打断正在执行的事务: ③能够基于压缩等功能节约磁盘空间和流量: ④自动实现备份检验: ④还原速度快: 二.安装: 其最新版的软件可从 http://www.percona.com/software/percon

(MYSQL学习笔记2)多表连接查询

3种连接方式的区别: INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录. LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录. RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录. 3个表连接查询,语句如下: SELECT a.YHID,a.TDID,b.YHMC,b.YHZH,c.TDMC FROM (km_tdcy a LEFT JOIN km_xtyh b ON a.YHID=b

MySQL学习笔记—自定义函数

MySQL学习笔记-自定义函数 注释语法: MySQL服务器支持3种注释风格: 从'#'字符从行尾. 从'– '序列到行尾.请注意'– '(双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如空格.tab.换行符等等).该语法与标准SQL注释语法稍有不同. 从/序列到后面的/序列.结束序列不一定在同一行中,因此该语法允许注释跨越多行. 下面的例子显示了3种风格的注释: mysql> SELECT 1+1; # This comment continues to the end of li

MySQL学习笔记-安装和基本操作

MySQL学习笔记-安装和基本操作   1.安装MySQL 1 # yum -y install mysql mysql-server mysql-devel 添加/etc/my.conf配置: 1 vi /etc/my.conf2 [mysqld]3 default-character-set=utf84 character_set_server=utf85 [client]6 default-character-set=utf8 2.启动和停止MySQL服务: # service mysql

python下用mysqldb连接使用数据库

第一步:连接 import MySQLdb #首先需要引入mysqldb即Python 连接 MySQL 的模块. conn=MySQLdb.connect(host="localhost",user="root",passwd="")#此处等价于缺省值时即conn=MySQLdb.connect() cur = conn.cursor() #创建游标,用于发送sql指令 这样就可以用游标cur发送sql指令给mysql了. 第二步:操作 1.创

MySQL学习笔记-子查询和连接

MySQL学习笔记-子查询和连接 使客户端进入gbk编码方式显示: mysql> SET NAMES gbk; 1.子查询 子查询的定义: 子查询(Subquery)是指出现在其他SQL语句内的SELECT子句. 例如:  SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中SELECT * FROM t1 称为Outer Query / Outer Statement (外部查询) SELECT col2 FROM t2 , 被称为Su