1. 程式人生 > >C/C++使用Select檢索MySQL中的資料

C/C++使用Select檢索MySQL中的資料

首先建立一個表和插入多行資料,如下

Create database demo;
Use demo;
DROP TABLE IF EXISTS `Students`;
CREATE TABLE `Students` 
(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(20) NOT NULL,
  `sex` char(5) DEFAULT NULL,
  `address` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
如下圖所示:


隨後插入資料:

insert  into `Students`(`id`,`name`,`sex`,`address`) values (1,'小白','男','北京市-定海區'),(2,'小黑','女','湖南省-長沙市-嶽麓區'),(3,'小黃','男','江蘇省-揚州市-邗江區'),(4,'小紅','女','雅苗蝶-雅苗蝶');
查詢結果如下圖所示:

然後我們介紹下如下函式:

1.int mysql_set_character_set(MYSQL *mysql, char *csname):函式用於為當前連線設定預設的字符集。字串csname指定了1個有效的字符集名稱。連線校對成為字符集的預設校對。

2.mysql_query() : 僅對 SELECT,SHOW,EXPLAIN 或 DESCRIBE 語句返回一個資源識別符號,如果查詢執行不正確則返回 FALSE。對於其它型別的 SQL 語句,mysql_query() 在執行成功時返回 TRUE,出錯時返回 FALSE。

4.MYSQL_RES *mysql_store_result(MYSQL *mysql):對於成功檢索了資料的每個查詢(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必須呼叫mysql_store_result()或mysql_use_result() 。通過檢查mysql_store_result()是否返回0,可檢測查詢是否沒有結果集。

5.mysql_num_rows:其表示取得結果集中行的數目。此命令只對SELECT語句有效。

6.mysql_num_fields() :函式返回結果集中欄位的數

7.MYSQL_ROW mysql_fetch_row(MYSQL_RES *result):檢索一個結果集合的下一行。當在mysql_store_result()之後使用時,如果沒有更多的行可檢索時,mysql_fetch_row()返回NULL。當在mysql_use_result()之後使用時,當沒有更多的行可檢索時或如果出現一個錯誤,mysql_fetch_row()返回NULL。

8.mysql_fetch_lengths(): 函式取得一行中每個欄位的內容的長度。

下面是程式程式碼:

#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
#include <mysql.h>
#pragma  comment(lib,"libmysql")

int my_select(MYSQL *conn)
{
	const char *sql = "select * from Students";
	int ret = mysql_query(conn, sql);
	if (ret != 0)
	{
		printf_s("error:%s\n", mysql_error(conn));
		system("pause");
		exit(1);
	}
	MYSQL_RES *result = mysql_store_result(conn);
	if (NULL == result)
	{
		printf("error(%d):%s\n", mysql_errno(conn), mysql_error(conn));
		system("pause");
		exit(1);
	}
	else
	{
		my_ulonglong num_rows = mysql_num_rows(result);
		printf_s("got:%d row:\n", (int)num_rows);

		unsigned int num_fields = mysql_num_fields(result);
		printf_s("number of fields:%d\n", (int)num_fields);

		MYSQL_ROW row;
		char szBuffer[1024];
		while (row = mysql_fetch_row(result))
		{
			unsigned long *lengths = mysql_fetch_lengths(result);
			for (int i = 0; i < num_fields; i++)
			{
				char *filed = row[i];
				unsigned int field_length = lengths[i];
				printf_s("column[%d],length[%d],data[%s]\n", i, field_length, filed ? filed : "null");
			}
			printf_s("\n");
		}
		mysql_free_result(result);
	}

	system("pause");
	return 0;
}

int main()
{
	if (mysql_library_init(0, NULL, NULL))
	{
		printf("could not initialize MySQL library\n");
		system("pause");
		exit(1);
	}
	MYSQL conn;
	mysql_init(&conn);
	MYSQL *ret = mysql_real_connect(&conn, "127.0.0.1", "root", "123456",
		"demo", 0, NULL, 0);
	if (!ret)
	{
		printf("Failed to connect to database:  %s\n",
			mysql_error(&conn));
		system("pause");
		exit(1);
	}
	if (!mysql_set_character_set(&conn, "gbk"))
	{
		printf("Character for the connection : %s\n",
			mysql_character_set_name(&conn));
	}

	my_select(&conn);
	mysql_close(&conn);
	mysql_library_end();
	system("pause");
	return 0;
}

執行結果如下: