用C語言操作MySQL數據庫

http://blog.chinaunix.net/uid-26743670-id-3479887.html

參考MYSQL的幫助文檔整理

這里歸納了C API可使用的函數,并在下一節詳細介紹了它們。請參見25.2.3節,“C API函數描述

函數

描述

mysql_affected_rows()

返回上次UPDATEDELETEINSERT查詢更改/刪除/插入的行數。

mysql_autocommit()

切換?autocommit模式,ON/OFF

mysql_change_user()

更改打開連接上的用戶和數據庫。

mysql_charset_name()

返回用于連接的默認字符集的名稱。

mysql_close()

關閉服務器連接。

mysql_commit()

提交事務。

mysql_connect()

連接到MySQL服務器。該函數已不再被重視,使用mysql_real_connect()取代。

mysql_create_db()

創建數據庫。該函數已不再被重視,使用SQL語句CREATE DATABASE取而代之。

mysql_data_seek()

在查詢結果集中查找屬性行編號。

mysql_debug()

用給定的字符串執行DBUG_PUSH

mysql_drop_db()

撤銷數據庫。該函數已不再被重視,使用SQL語句DROP DATABASE取而代之。

mysql_dump_debug_info()

讓服務器將調試信息寫入日志。

mysql_eof()

確定是否讀取了結果集的最后一行。該函數已不再被重視,可以使用mysql_errno()mysql_error()取而代之。

mysql_errno()

返回上次調用的MySQL函數的錯誤編號。

mysql_error()

返回上次調用的MySQL函數的錯誤消息。

mysql_escape_string()

為了用在SQL語句中,對特殊字符進行轉義處理。

mysql_fetch_field()

返回下一個表字段的類型。

mysql_fetch_field_direct()

給定字段編號,返回表字段的類型。

mysql_fetch_fields()

返回所有字段結構的數組。

mysql_fetch_lengths()

返回當前行中所有列的長度。

mysql_fetch_row()

從結果集中獲取下一行

mysql_field_seek()

將列光標置于指定的列。

mysql_field_count()

返回上次執行語句的結果列的數目。

mysql_field_tell()

返回上次mysql_fetch_field()所使用字段光標的位置。

mysql_free_result()

釋放結果集使用的內存。

mysql_get_client_info()

以字符串形式返回客戶端版本信息。

mysql_get_client_version()

以整數形式返回客戶端版本信息。

mysql_get_host_info()

返回描述連接的字符串。

mysql_get_server_version()

以整數形式返回服務器的版本號。

mysql_get_proto_info()

返回連接所使用的協議版本。

mysql_get_server_info()

返回服務器的版本號。

mysql_info()

返回關于最近所執行查詢的信息。

mysql_init()

獲取或初始化MYSQL結構。

mysql_insert_id()

返回上一個查詢為AUTO_INCREMENT列生成的ID

mysql_kill()

殺死給定的線程。

mysql_library_end()

最終確定MySQL C API庫。

mysql_library_init()

初始化MySQL C API庫。

mysql_list_dbs()

返回與簡單正則表達式匹配的數據庫名稱。

mysql_list_fields()

返回與簡單正則表達式匹配的字段名稱。

mysql_list_processes()

返回當前服務器線程的列表。

mysql_list_tables()

返回與簡單正則表達式匹配的表名。

mysql_more_results()

檢查是否還存在其他結果。

mysql_next_result()

在多語句執行過程中返回/初始化下一個結果。

mysql_num_fields()

返回結果集中的列數。

mysql_num_rows()

返回結果集中的行數。

mysql_options()

mysql_connect()設置連接選項。

mysql_ping()

檢查與服務器的連接是否工作,如有必要重新連接。

mysql_query()

執行指定為Null終結的字符串SQL查詢。

mysql_real_connect()

連接到MySQL服務器。

mysql_real_escape_string()

考慮到連接的當前字符集,為了在SQL語句中使用,對字符串中的特殊字符進行轉義處理。

mysql_real_query()

執行指定為計數字符串的SQL查詢。

mysql_refresh()

刷新或復位表和高速緩沖。

mysql_reload()

通知服務器再次加載授權表。

mysql_rollback()

回滾事務。

mysql_row_seek()

使用從mysql_row_tell()返回的值,查找結果集中的行偏移。

mysql_row_tell()

返回行光標位置。

mysql_select_db()

選擇數據庫。

mysql_server_end()

最終確定嵌入式服務器庫。

mysql_server_init()

初始化嵌入式服務器庫。

mysql_set_server_option()

為連接設置選項(如多語句)。

mysql_sqlstate()

返回關于上一個錯誤的SQLSTATE錯誤代碼。

mysql_shutdown()

關閉數據庫服務器。

mysql_stat()

以字符串形式返回服務器狀態。

mysql_store_result()

檢索完整的結果集至客戶端。

mysql_thread_id()

返回當前線程ID

mysql_thread_safe()

如果客戶端已編譯為線程安全的,返回1

mysql_use_result()

初始化逐行的結果集檢索。

mysql_warning_count()

返回上一個SQL語句的告警數。

MySQL交互時,應用程序應使用該一般性原則:

1.????通過調用mysql_library_init(),初始化MySQL庫。庫可以是mysqlclient C客戶端庫,或mysqld嵌入式服務器庫,具體情況取決于應用程序是否與“-libmysqlclient”“-libmysqld”標志鏈接。

2.????通過調用mysql_init()初始化連接處理程序,并通過調用mysql_real_connect()連接到服務器。

3.????發出SQL語句并處理其結果。(在下面的討論中,詳細介紹了使用它的方法)。

4.????通過調用mysql_close(),關閉與MySQL服務器的連接。

5.????通過調用mysql_library_end(),結束MySQL庫的使用。

介紹常用到的MYSQL相關的C變量類型。這些類型在我們后面定義變量的時候會用到

1、MYSQL

???????要連接MYSQL,必須建立MYSQL實例,通過mysql_init初始化方能開始進行連接

示例:

MYSQL mysql;????????????????????#創建MYSQL實例

mysql_init(&mysql);?????????????#初始化開始進行連接

2、MYSQL_RES

這個結構代表返回行的一個查詢的(SELECT,?SHOW,?DESCRIBE,?EXPLAIN)的結果。返回的數據稱為“數據集”。?從數據庫讀取數據,最后就是從MYSQL_RES中讀取數據。

PS:類似于JAVA里面的ResultSet變量一樣,將結果集存入到此變量中再從它里面去讀數據。

3、MYSQL_ROW

這是一個行數據的類型安全(type-safe)的表示。當前它實現為一個計數字節的字符串數組。行通過調用mysql_fetch_row()獲得

4、MYSQL_FIELD

你可以通過重復調用mysql_fetch_field()對每一列獲得MYSQL_FIELD結構。這個結構包含字段信息,例如字段名、類型和大小。

PS:此變量定義的是列的相關屬性問題!

?

?

?

?

示例一:實現遍歷查詢select * from table-name?操作

#include "windows.h"

#include "mysql.h"

#pragma comment(lib,"libmySQL.lib")

int main()

{

??????MYSQL mysql;?????//mysql連接

??????MYSQL_RES *res; //這個結構代表返回行的一個查詢結果集

??????MYSQL_ROW row; //一個行數據的類型安全(type-safe)的表示

??????char *query;???//查詢語句?????

??????int t,r;

??????mysql_init(&mysql);

?????????if (!mysql_real_connect(&mysql,"localhost", "root", "123", "test",3306,NULL,0))

??????{

?

?????????printf( "Error connecting to database: %s",mysql_error(&mysql));

?

??????} else

?????????printf("Connected...");

?????????query="SET CHARACTER SET utf8"; //設置編碼

??????t=mysql_real_query(&mysql,query,(unsigned int)strlen(query));

??????if(t)

??????{

???????????printf("編碼設置失敗");

??????}

?????????query=" select * from a ";

??????t=mysql_real_query(&mysql,query,(unsigned int)strlen(query));

??????if(t)

??????{

??????????printf("執行查詢時出現異常: %s",mysql_error(&mysql));

??????}else

??????????printf("[%s]?構建成功",query);

??????res=mysql_store_result(&mysql);

??????while(row=mysql_fetch_row(res))

??????{?????????????????????????????

??????????/*

????????????????for(t=0;t<mysql_num_fields(res);t++)

???????????{

???????????????printf("%s" " ",row[t]);

???????????}

?????????????????*/

????????????????printf("%s",row[1]);?????????表示查詢的第幾個字段的!也還可以遍歷全部字段信息

??????????printf("\n");

?

??????}

??????mysql_free_result(res);

mysql_close(&mysql);

?????????return 0;

}

?

示例二:執行插入、更新、刪除操作

#include "windows.h"

#include "mysql.h"

#pragma comment(lib,"libmySQL.lib")

int main()

{

??????MYSQL mysql;?????//mysql連接

??????MYSQL_RES *res; //這個結構代表返回行的一個查詢結果集

??????MYSQL_ROW row; //一個行數據的類型安全(type-safe)的表示

??????char *query;???//查詢語句?????

??????int t,r;

??????mysql_init(&mysql);

?????????if (!mysql_real_connect(&mysql,"localhost", "root", "123", "test",3306,NULL,0))

??????{

?

?????????printf( "Error connecting to database: %s",mysql_error(&mysql));

?

??????} else

?????????printf("Connected...");

?????????query="SET CHARACTER SET utf8"; //設置編碼

??????t=mysql_real_query(&mysql,query,(unsigned int)strlen(query));

??????if(t)

??????{

???????????printf("編碼設置失敗");

??????}

?????????query="insert into a(name,age) values('w',9)";

??????t=mysql_real_query(&mysql,query,(unsigned int)strlen(query));

??????if(t)

??????{

??????????printf("執行查詢時出現異常: %s",mysql_error(&mysql));

??????}else

??????????printf("[%s]?構建成功",query);

??????mysql_close(&mysql);

??????return 0;

}


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384160.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384160.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384160.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

三字棋

整個游戲可以分為以下幾個環節 1.打印一個玩游戲的菜單 2.玩游戲 (1)玩家走一步 (2)電腦走一步 每走一步對結果進行顯示,其中游戲的結果可分為玩家贏,電腦贏,以及平局 代碼顯示如下 game.c #define _CRT_SECURE_NO_WARNINGS 1 #include<stdlib.h> #include<stdio.h&…

gets fgets 區別

http://www.cnblogs.com/aexin/p/3908003.html 1. gets與fgets gets函數原型&#xff1a;char*gets(char*buffer);//讀取字符到數組&#xff1a;gets(str);str為數組名。 gets函數功能&#xff1a;從鍵盤上輸入字符&#xff0c;直至接受到換行符或EOF時停止&#xff0c;并將讀取…

Fliptile——搜索+二進制優化

【題目描述】 Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He has arranged a brainy activity for cows in which they manipulate an M N grid (1 ≤ M ≤ 15; 1 ≤ N ≤ 15) of square tiles, each of which is col…

掃雷

1.將掃雷界面看成一個二維數組,先對界面進行打印 2.置雷 3.排雷 4.對每次的結果進行游戲輸出 5.提醒用戶游戲輸贏 game.c #define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" //初始化 void init_board(char mine[ROWS][COLS], int rows, int cols, char set) {in…

C相關練習題

1.調整數組使奇數全部都位于偶數前面。 輸入一個整數數組&#xff0c;實現一個函數&#xff0c;來調整該數組中數字的順序使得數組中所有的奇數位于數組的前半部分&#xff0c;所有偶數位于數組的后半部分。 #include<stdio.h> void range(int arr[], int sz) {int left…

【C語言】單鏈表的所有操作的實現(包括PopBack、PushBack、PopFront、PushFront、Insert)

http://blog.csdn.net/hanjing_1995/article/details/51539563 [cpp] view plaincopy #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; //單鏈表的實現 #include<assert.h> typedef int DataType; typedef…

Shuffle'm Up——簡單模擬

【題目描述】 A common pastime for poker players at a poker table is to shuffle stacks of chips. Shuffling chips is performed by starting with two stacks of poker chips, S1 and S2, each stack containing C chips. Each stack may contain chips of several diff…

C++ explicit關鍵字詳解

http://www.cnblogs.com/ymy124/p/3632634.html 首先, C中的explicit關鍵字只能用于修飾只有一個參數的類構造函數, 它的作用是表明該構造函數是顯示的, 而非隱式的, 跟它相對應的另一個關鍵字是implicit, 意思是隱藏的,類構造函數默認情況下即聲明為implicit(隱式). 那么顯示聲…

Fire!——兩個BFS

【題目描述】 【題目分析】 看到題目后很清楚是兩個BFS&#xff0c;可是我覺得對于火的BFS可以轉換成判斷&#xff0c;我的做法是將火的位置全部記錄下來&#xff0c;然后判斷某個位置距離每個火的步數是否小于當前步數&#xff0c;可是錯了&#xff0c;還不清楚為什么&#x…

函數調用過程(棧楨)

棧楨 首先來看一段代碼 #include<stdio.h> int add(int x, int y) {int z x y;return z; } int main() {int a 10;int b 20;int ret add(a, b);printf("ret %d\n",ret);return 0; } 此處是為了給a,b分別開辟空間,這時棧楨如圖所示 兩條push命令將a,b變…

C++智能指針簡單剖析

http://blog.csdn.net/lanxuezaipiao/article/details/41603883 導讀 最近在補看《C Primer Plus》第六版&#xff0c;這的確是本好書&#xff0c;其中關于智能指針的章節解析的非常清晰&#xff0c;一解我以前的多處困惑。C面試過程中&#xff0c;很多面試官都喜歡問智能指針相…

非常可樂——BFS

【題目描述】 大家一定覺的運動以后喝可樂是一件很愜意的事情&#xff0c;但是seeyou卻不這么認為。因為每次當seeyou買了可樂以后&#xff0c;阿牛就要求和seeyou一起分享這一瓶可樂&#xff0c;而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子&#xff0c;它們的容…

整型數據存儲

//代碼1 #include<stdio.h> int main() {char a -1;signed char b -1;unsigned char c -1;printf("a %d, b %d, c %d", a, b, c);return 0; } 1000 0000 0000 0001 -> -1源碼 1111 1111 1111 1110 -> -1反碼 1111 1111 1111 1111 -> -1補碼 對于…

聊聊gcc參數中的-I, -L和-l

http://blog.csdn.net/stpeace/article/details/49408665 在本文中&#xff0c; 我們來聊聊gcc中三個常見的參數&#xff0c; 也即-I, -L和-l 一. 先說 -I (注意是大寫的i) 我們先來看簡單的程序&#xff1a; main.c: [cpp] view plaincopy #include <stdio.h> #incl…

Pots——BFS

【題目描述】 You are given two pots, having the volume of A and B liters respectively. The following operations can be performed: FILL(i) fill the pot i (1 ≤ i ≤ 2) from the tap; DROP(i) empty the pot i to the drain; POUR(i,j) pour from pot i to pot j;…

HDU - 4578Transformation——線段樹+區間加法修改+區間乘法修改+區間置數+區間和查詢+區間平方和查詢+區間立方和查詢

【題目描述】 HDU - 4578Transformation Problem Description Yuanfang is puzzled with the question below: There are n integers, a1, a2, …, an. The initial values of them are 0. There are four kinds of operations. Operation 1: Add c to each number between ax …

[C++基礎]034_C++模板編程里的主版本模板類、全特化、偏特化(C++ Type Traits)

http://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/18/2728753.html 1. 主版本模板類 首先我們來看一段初學者都能看懂&#xff0c;應用了模板的程序&#xff1a; 1 #include <iostream>2 using namespace std;3 4 template<class T1, class T2>5 clas…

自定義類型: 結構體,枚舉,聯合

1.結構體 個人認為結構體和數組特別相似&#xff0c;只不過結構體和數組的區別在于結構體的成員可以是不同類型&#xff0c;而數組成員類型是相同的。 &#xff08;1&#xff09;結構體的聲明 struct tag {成員列表//至少得有一個成員 }值列表;//值列表可以省略 struct {int a…

詳解C++中的函數調用和下標以及成員訪問運算符的重載

http://www.jb51.net/article/78436.htm 這篇文章主要介紹了詳解C中的函數調用和下標以及成員訪問運算符,講到了這些二元運算符使用的語法及重載,需要的朋友可以參考下函數調用 使用括號調用的函數調用運算符是二元運算符。 語法 ?1primary-expression ( expression-list )備…

A計劃——BFS

【題目描述】 可憐的公主在一次次被魔王擄走一次次被騎士們救回來之后&#xff0c;而今&#xff0c;不幸的她再一次面臨生命的考驗。魔王已經發出消息說將在T時刻吃掉公主&#xff0c;因為他聽信謠言說吃公主的肉也能長生不老。年邁的國王正是心急如焚&#xff0c;告招天下勇士…