1. 程式人生 > >關於mysql的 C API 的常用用法

關於mysql的 C API 的常用用法

C API 程式碼是隨MySQL釋出的, 它被包含在mysqlclient庫且允許C程式存取一個數據庫。

具體每個MySql C API 的函式解釋  以及引數作用可以參考http://m.blog.csdn.net/blog/zxh2075/19285685

首先看一下資料結構

MYSQL  這個結構表示對一個數據庫連線的控制代碼,它被用於幾乎所有的MySQL函式。

MYSQL_RES 這個結構代表返回行的一個查詢的結果。 從查詢返回的資訊稱為結果集合

MYSQL_ROW 這是一個行資料的型別安全(type-safe)的表示。當前他實現為一個計數字節的字串陣列。

MYSQL_FIELD 這個結構包含欄位資訊, 例如欄位名, 型別  和大小。  可以通過重複呼叫mysql_fetch_field()對每一列獲得MYSQL_FIELD結構。欄位值不是這個結構的部分,它們被包含在MYSQL_ROW結構中。

以下是其中常用的api函式

mysql_affected_rows()返回被最新的update, delete或 insert 查詢影響的行數。

mysql_close()關閉一個伺服器連線

mysql_erro()返回最近被呼叫的MySQL函式的出錯編號

mysql_fetch_row()從結果集合中取得下一行

mysql_field_count()返回最近查詢的結果列的數量

mysql_init()獲得或初始化一個MySQL結構。

mysql_num_Rows()返回一個結果集合中的行的數量。

mysql_query()執行指定為一個空結尾的字串的SQL查詢

mysql_real_connect()連線一個MySQL伺服器

mysql_real_query()執行指定為帶技術的字串的SQL查詢

欄位型別。 型別值可以是下標所列的MYSQL_TYOE符號之一

MYSQL_TYPE_TINYTINYINT型別

MYSQL_TYPE_SHORTSMALLINT型別

MYSQL_TYPE_LONGINTEGER型別

MYSQL_TYPE_INT24MEDIUMINT欄位

MYSQL_TYPE_LONGLONGBIGINT欄位

MYSQL_TYPE_DECIMALDECIMAL或NUMERIC欄位

MYSQL_TYPE_FLOATFLOAT欄位

MYSQL_TYPE_DOUBLEDOUBLE或REAL欄位

MYSQL_TYPE_BITBIT欄位

MYSQL_TYPE_TImESTAMPTIMESTAMP欄位

MYSQL_TYPE_DATEDATE欄位

MYSQL_TYPE_TIMETIME欄位

MYSQL_TYPE_DATETIMEDATETIME欄位

MYSQL_TYPE_YEARYEAR欄位

MYSQL_TYPE_STRINGVARCHAR欄位

MYSQL_TYPE_BLOBBLOB或TEXT欄位

MYSQL_TYPE_SETSET欄位

MYSQL_TYPE_ENUMENUM欄位

MYSQL_TYPE_GEOMETRYSpatial欄位

MYSQL_TYPE_NULLNULL_type欄位

MYSQL_TYPE_CHAR不再重現,用MYSQL_TYPE_TINY取代

與MySql互動時,的一般原則

1 通過呼叫mysql_library_init(), 初始化MySql庫。

2 通過呼叫mysql_init()初始化連線處理程式,並通過呼叫mysql_real_connect()連線到伺服器。

3 發出SQL語句並處理其內容

4通過呼叫mysql_close(), 關閉與MySQL伺服器的連線。

5 通過呼叫mysql_library_end(), 結束MySql庫的使用

上面都是理論,程式設計師還是要通過程式碼看本質。 一下舉幾個例子

一  連線資料庫, 並執行簡單的查詢語句

在寫連線MySQL資料庫之前要把配置先搞好,具體搞法先看下這個連結http://www.cnblogs.com/justinzhang/archive/2011/09/23/2185963.html

之後的例子中我會具體說明

#include <iostream>
#include <WinSock2.h>
#include <Windows.h>
#include "mysql.h"

MYSQL* con;		// 資料庫的連線控制代碼
MYSQL_RES* res;	// 查詢的結果集合
MYSQL_ROW row;	// 行資料

int main()
{
	char szTmp[512];
	char szUser[30] = "root";
	char szPasswd[30] = "123456";
	char szIp[30] = "localhost";			// 這個位置的ip必須與你的資料庫的ip一致
	char szDBName[30] = "fktestdb";

	// 初始化連線控制代碼
	con = mysql_init((MYSQL*)0);
	if (con == NULL) return 0;
	// 連線Mysql
	MYSQL* pTmp = mysql_real_connect(con, szIp, szUser, szPasswd, szDBName, 3306, NULL, 0);
	if (pTmp == NULL) return 0;

	// 查詢語句
	strcpy(szTmp, "select * from mcftest");
	int rt = mysql_real_query(con, szTmp, strlen(szTmp) );

	res = mysql_store_result(con);		// 將結果儲存在res的結構體中

	// mysql_data_seek(res, 0);<span style="white-space:pre">	這個函式設定當前游標在第幾行</span>
	row = mysql_fetch_row(res);			// 開始游標是在第一行的所以不需要設定
	printf("id:%d\n", atoi(row[0]));
	// mysql_fetch_field(res);
	row = mysql_fetch_row(res);			// 每呼叫一次mysql_fetch_row() 游標就往下走一步
	printf("id:%d\n", atoi(row[0]));
	row = mysql_fetch_row(res);
	printf("id:%d\n", atoi(row[0]));
	getchar();
	return 0;
}