1. 程式人生 > >c語言訪問mysql 完整例子

c語言訪問mysql 完整例子

<span style="font-size:18px;">1、手寫安裝帶mysql sdk 的mysql
2、新建控制檯專案,專案屬性中把
C:\Program Files\MySQL\MySQL Server 5.5\include 加入“包含目錄”
把C:\Program Files\MySQL\MySQL Server 5.5\lib 加入“庫目錄”

3、stdafx.h中加入
#include <winsock.h> //注意順序,要放在mysql.h前
#include <mysql.h>//控制檯專案中要在mysql.h之前include <winsock.h>

//注意lib新增到“庫目錄”中,而不是“引用目錄”中
#pragma comment(lib, "libmysql.lib")

4、把libmysql.dll放到生成的exe目錄下

5、主要的幾個例子:
//執行基本查詢
void test1()
{
 MYSQL *pConn;
 pConn = mysql_init(NULL);
 //第2、3、4、5引數的意思分別是:伺服器地址、使用者名稱、密碼、資料庫名,第6個為mysql埠號(0為預設值3306)
 if(!mysql_real_connect(pConn,"localhost","root","root","test",0,NULL,0))
 {  
  printf("無法連線資料庫:%s",mysql_error(pConn));
  return;
 }
 mysql_query(pConn,"set names gbk");//防止亂碼。設定和資料庫的編碼一致就不會亂碼
 //SET NAMES x 相當於 SET character_set_client = x;SET character_set_results = x;SET character_set_connection = x;
 //寫set character set gbk;查詢不會亂碼,但是引數化插入會報錯。而set names gbk則都不會亂碼


 //mysql_real_query比mysql_query多了個引數: 字串query的長度, 所以適合有二進位制資料的query, 而mysql_query的字串query不能包含二進位制,因為它以\0為結尾
 //mysql_query() 不能傳二進位制BLOB欄位,因為二進位制資訊中的\0會被誤判為語句結束。 mysql_real_query() 則可以。
 if(mysql_query(pConn,"select * from persons"))
 {
  printf("查詢失敗:%s",mysql_error(pConn));
  return;
 }

 //mysql_store_result是把查詢結果一次性取到客戶端的離線資料集,當結果比較大時耗記憶體。
 //mysql_use_result則是查詢結果放在伺服器上,客戶端通過指標逐行讀取,節省客戶端記憶體。但是一個MYSQL*連線同時只能有一個未關閉的mysql_use_result查詢
 MYSQL_RES *result = mysql_store_result(pConn);
 MYSQL_ROW row;
 while(row = mysql_fetch_row(result))
 {
  printf("%s %s\n",row[1],row[2]);
 }

 mysql_free_result(result);
 mysql_close(pConn);
}

//獲得更新行數
void test2()
{
 MYSQL *pConn;
 pConn = mysql_init(NULL);
 if(!mysql_real_connect(pConn,"127.0.0.1","root","root","test",0,NULL,0))
 {
  printf("無法連線資料庫:%s",mysql_error(pConn));
  return;
 }
 if(mysql_query(pConn,"update persons set Age=Age+1"))
 {
  printf("執行失敗:%s",mysql_error(pConn));
  return;
 }
 printf("更新成功,共更新完成%d條",mysql_affected_rows(pConn));
 mysql_close(pConn);
}

//獲得自增id
void test3()
{
 MYSQL *pConn;
 pConn = mysql_init(NULL);
 if(!mysql_real_connect(pConn,"127.0.0.1","root","root","test",0,NULL,0))
 {
  printf("無法連線資料庫:%s",mysql_error(pConn));
  return;
 }
 mysql_query(pConn,"set names gbk");
 if(mysql_query(pConn,"insert into persons(Name,Age) values('傳智播客',100)"))
 {
  printf("執行insert失敗%s",mysql_error(pConn));
  return;
 }
 printf("執行insert成功,新id=%d",mysql_insert_id(pConn));
 mysql_close(pConn);

}

//引數化查詢
void test4()
{
 MYSQL* pConn;
 pConn = mysql_init(NULL);
 if(!mysql_real_connect(pConn,"127.0.0.1","root","root","test",0,NULL,0))
 {
  printf("資料庫連線失敗:%s",mysql_error(pConn));
  return;
 }

 mysql_query(pConn,"set names gbk");
 MYSQL_STMT    *stmt;    
    MYSQL_BIND    bind[2];   
 memset(bind,0,sizeof(bind));//把is_null、length等欄位預設值設定為NULL等預設值,否則執行會報錯

 stmt = mysql_stmt_init(pConn);  
 char* insertSQL="insert into persons(Name,Age) values(?,?)";
    if (mysql_stmt_prepare(stmt, insertSQL, strlen(insertSQL)))    
    {    
        fprintf(stderr, " mysql_stmt_prepare(), INSERT failed,%s\n",mysql_error(pConn)); 
        return;    
    }    
 bind[0].buffer_type= MYSQL_TYPE_STRING;    
    bind[0].buffer= "黑馬";    
    bind[0].buffer_length= strlen("黑馬"); //如果設定了buffer_length,則可以不試用length
    
    int age=3;

 bind[1].buffer_type= MYSQL_TYPE_LONG;    
    bind[1].buffer= &age;  
 bind[1].buffer_length = sizeof(age);
     
    if (mysql_stmt_bind_param(stmt, bind))    
    {    
        fprintf(stderr, " mysql_stmt_bind_param() failed %s\n", mysql_stmt_error(stmt));    
        return;
    }    
    
    if (mysql_stmt_execute(stmt))    
    {    
        fprintf(stderr, " mysql_stmt_execute(), failed %s\n", mysql_stmt_error(stmt));    
        return;   
    }    
 mysql_stmt_close(stmt);
 mysql_close(pConn);  
 printf("引數化執行SQL結束");
}</span>

相關推薦

c語言訪問mysql 完整例子

<span style="font-size:18px;">1、手寫安裝帶mysql sdk 的mysql 2、新建控制檯專案,專案屬性中把 C:\Program Files\MySQL\MySQL Server 5.5\include 加入“包含目錄” 把C:

C語言訪問MySQL資料庫

從網上得到的一個已有程式,經過簡單修改和除錯滿足了自己變成的需求,記錄一下。。。謝謝前輩們的分享,讓我們可以站在巨人的肩膀上學習,進步!! #include #include #include #include #include "mysql.h" #pragma co

使用c語言訪問mysql

用c語言連線MYSQL資料庫包含兩個步驟: 1.初始化一個連結控制代碼結構; 2.實際進行連線 首先,使用mysql_init來初始化連線控制代碼: #include<mysql.h> MYSQL *mysql_init(MYSQL *); 通常你傳遞NULL給

編寫Linux下用C語言訪問MySQL資料庫的程式

  在編寫這個程式的時候我和同學費了很大的力氣特別是在編譯的時候,下面我就把自己編譯的經驗給大家分享一下,希望大家能少走一些彎路。     我自己裝了mysql-5.0.41-linux-i686-glibc23.tar.gz 安裝部分就不說了!

一個C#操作RabbitMQ的完整例子

void 引用 rabbitmq sys fault 密碼 cnn nload subscribe 一、下載RabbitMQ http://www.rabbitmq.com/install-windows.html 二、下載OTP http://www.erlan

c語言程序設計 第一例子

input ret his output can 表示 c語言 clu c語言程序 #include <studio.h> int main(){ printf("this is dog.\n"); return 0; } studio.h 表示standar

C語言訪問INFORMIX資料庫 — SQLDA使用

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C語言訪問INFORMIX資料庫 — 介面實現

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

ubuntu下c語言mysql進行CRUD(增刪改查)

Step 1:登入mysql mysql -u root -p Step 2:在資料庫中新增資料: create database foo; use foo; CREATE TABLE children( childno int(11) NOT NULL

c語言連結MySQL資料庫出現Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

這個問題,困擾了我好幾天,最後終於解決了。首先,我用find命令找了半天,也只有/tmp/mysql.sock,當時我很崩潰啊,後來看到一篇文章,我忘了地址,讓我有感,於是解決了這個問題。 1、在/var/run/目錄下建立一個mysqld的資料夾(如果這個資料夾沒有的話)。 sudo

C語言呼叫MySQL介面

說明:在做一個專案的過程中,用到了這部分知識,個人覺得網上關於這部分的介紹真的比較模糊,就自己總結一下專案中用到的這些介面的使用方法。 準備工作 這個專案是在Linux下開發,如果需要使

(c語言版)一個完整的程式,實現隨機生成20個元素的連結串列,快速查詢中間結點的值並顯示

一、分清struct 與typedef struct 方法1: #include <stdio.h> typedef struct{     int a;     int b; }test; //使用typedef 將t

C語言操作MySQL資料庫,進行連線、插入、修改、刪除等操作

  很多人用到MySQL來開發一些專案,有時為了效能,我們會直接用C語言來開發相關的模組,尤其在我們的web應用中,雖然PHP、JSP等指令碼均提供了MySQL的介面,但是顯然直接使用C語言具有更好的安全性和效能,Michael以前用PHP開發的多個專案中就使用了C語言編寫的

C語言操作mysql範例(增刪查改)

    C程式碼的API是隨MySQL一起釋出的. 它包含在mysqlclient庫中, 可以使C程式來訪問資料庫.     MySQL原始碼包中的許多客戶端都是用C寫的. 如果你正在找使用這些C API的例子, 可以看看客戶端的寫法.你可以在MySQL原始碼包的clie

C語言 函式指標的例子

#include <stdio.h> typedef struct Foo { int a; int b; }Foo_t; struct Foo f; void *vp; int max(Foo_t *ef,int c) { return ((ef-

C語言操作mysql資料庫上傳變數

上傳變數文字內容 上傳命令:insert into table_name(list1,list2,...) values("***","***") 當上傳的值為變數時可如此執行 string a="上傳的檔案"; int id=1;//以上變數可隨意定義 char sqlstr[100];

[C語言] Socket程式設計簡單例子/Client+Server

一、原理=====1.基於TCP協議的伺服器端程式流程:=======1)建立套接字(socket)2)繫結套接字(bind)3)將套接字設為監聽,準備接收客戶請求(listen)4)等待客戶請求的到來,當請求到來後,接受請求,返回一個對應於此次連線的套接字(accept)5)用返回的套接字與客戶端進行通訊(

C語言訪問一個連結

示例程式碼1: # include <Windows.h> int main(){ system("start http://""www.baidu.com"); return 0; } 示例程式碼: # include <stdio.h>

C語言操作MySQL資料庫

參考MYSQL的幫助文件整理 這裡歸納了C API可使用的函式,並在下一節詳細介紹了它們。請參見“C API函式描述”。 函式 描述 mysql_affected_rows() 返回上次UPDATE、DELETE或INSERT查詢更改/刪除/插入的行數。 mysql_autocommit

Linux下C語言執行MySQL語句

執行SQL語句的增、刪、改、查的主要API函式為: int mysql_query(MYSQL *connection, const char *query); 函式接收引數連線控制代碼和字串形式的有效SQL語句(沒有結束的分號,這與mysql工具不同)。如果