1. 程式人生 > >linux 環境下 c語言實現mysql資料庫圖片的儲存以及多資料庫直接的轉存

linux 環境下 c語言實現mysql資料庫圖片的儲存以及多資料庫直接的轉存

作為一個程式設計師,CSDN對我的程式設計帶來了很多幫助和提高,在這裡可以讓你找到很多開發過程中遇到的問題的解決辦法,今天也寫點自己積累的東西跟大家分享一下,希望對需要的人有幫助.

資料背景:

        之前專案一直使用Oracle資料,最近換工作,公司使用的為mysq資料庫,專案中需要將A資料庫儲存的圖片資料轉存到另外一個遠端資料庫B,儲存圖片使用的型別為longblob,LongBlob (lang binary large object),二進位制大物件,是一個可以儲存二進位制檔案的容器。longblob這裡不做詳細介紹。下面將如何進行資料儲存的操作貼出來,只是一個簡單的demo,實際應用還要根據實際需求修改,但也包含了圖片下載和圖片轉存的功能。程式碼如下:

  1. #include <my_global.h>
  2. #include <mysql.h>
  3. #include <string.h>
  4. void finish_with_error(MYSQL *con)  
  5. {  
  6.   fprintf(stderr, "%s\n", mysql_error(con));  
  7.   mysql_close(con);  
  8.   exit(1);          
  9. }  
  10. int main(int argc, char **argv)  
  11. {  
  12.   /*測試用將圖片儲存本地*/
  13.   FILE *fp = fopen("woman2.jpg"
    "wb");  
  14.   if (fp == NULL)   
  15.   {  
  16.       fprintf(stderr, "cannot open image file\n");      
  17.       exit(1);  
  18.   }  
  19.   /*連線資料A*/
  20.   MYSQL *con = mysql_init(NULL);  
  21.   if (con == NULL)  
  22.   {  
  23.       fprintf(stderr, "mysql_init() failed\n");  
  24.       exit(1);  
  25.   }    
  26.   if (mysql_real_connect(con, "localhost"
    "root""1qazxsw2#",   
  27.           "QR", 0, NULL, 0) == NULL)   
  28.   {  
  29.       finish_with_error(con);  
  30.   }  
  31.   /*查詢A資料庫的圖片資料*/
  32.   if (mysql_query(con, "SELECT IMG_B FROM QR_IMG WHERE QRNUM='3691746087775941894'"))  
  33.   {  
  34.       finish_with_error(con);  
  35.   }  
  36.   MYSQL_RES *result = mysql_store_result(con);  
  37.   if (result == NULL)   
  38.   {  
  39.       finish_with_error(con);  
  40.   }    
  41.   MYSQL_ROW row = mysql_fetch_row(result);  
  42.   unsigned long *lengths = mysql_fetch_lengths(result);  
  43.   if (lengths == NULL) {  
  44.       finish_with_error(con);  
  45.   }  
  46.   /*連線遠端資料B*/
  47.   MYSQL *con1 = mysql_init(NULL);  
  48.   if (con1 == NULL)  
  49.   {  
  50.       fprintf(stderr, "mysql_init() failed\n");  
  51.       exit(1);  
  52.   }    
  53.   if (mysql_real_connect(con1, "localhost""root""1qazxsw2#",   
  54.           "card", 0, NULL, 0) == NULL)   
  55.   {  
  56.       finish_with_error(con);  
  57.   }  
  58.   /*圖片資料進行轉義,儲存圖片的關鍵步驟*/
  59.   char chunk[2*lengths[0]+1];  
  60.   mysql_real_escape_string(con, chunk, row[0], lengths[0]);  
  61.   /*資料插入B資料庫*/
  62.   char *st = "INSERT INTO card_pack(code_img) VALUES('%s')";  
  63.   size_t st_len = strlen(st);  
  64.   char query[st_len + 2*lengths[0]+1];   
  65.   int len = snprintf(query, st_len + 2*lengths[0]+1, st, chunk);  
  66.   if (mysql_real_query(con1, query, len))  
  67.   {  
  68.       finish_with_error(con);  
  69.   }  
  70.   /*儲存到本地,用來測試用判斷圖片時候下載成功*/
  71.   fwrite(row[0], lengths[0], 1, fp);  
  72.   if (ferror(fp))   
  73.   {              
  74.       fprintf(stderr, "fwrite() failed\n");  
  75.       mysql_free_result(result);  
  76.       mysql_close(con);  
  77.       exit(1);        
  78.   }    
  79.   int r = fclose(fp);  
  80.   if (r == EOF) {  
  81.       fprintf(stderr, "cannot close file handler\n");  
  82.   }  
  83.   mysql_free_result(result);  
  84.   mysql_close(con);  
  85.   mysql_close(con1);  
  86.   exit(0);  
  87. }  

借鑑資料:點選開啟連結http://zetcode.com/tutorials/mysqlcapitutorial/

相關推薦

linux 環境 c語言實現mysql資料庫圖片儲存以及資料庫直接

作為一個程式設計師,CSDN對我的程式設計帶來了很多幫助和提高,在這裡可以讓你找到很多開發過程中遇到的問題的解決辦法,今天也寫點自己積累的東西跟大家分享一下,希望對需要的人有幫助. 資料背景:         之前專案一直使用Oracle資料,最近換工作,公司使用的為

linux環境C語言實現非阻塞方式讀取字串資料的串列埠測試程式,即串列埠工具的編寫

一、前言 1.1 關於串列埠測試工具,網上已經有整合好的應用程式提供大家使用,但其只提供功能介面,內部具體怎麼實現的還需要自己去探索; 1.2 關於串列埠通訊的測試程式在網上已經是數見不鮮,但也不排除很多是直接“參考”別人的(ctrl+c),而且很多程式

linuxC語言操作mysql資料庫(系統自帶版本3.23.54)

      我的上一篇blog介紹了在linux環境下如何安裝配置系統自帶的mysql資料庫,並列舉了mysql的一些簡單的操作。接下來我將介紹一下如何利用mysql提供給我們的API來訪問並操作mysql資料庫(C語言)。 首先,我們需要安裝mysql-devel-3.23

Linux環境Shell調用MySQL實現定時任務

usr .sql 操作 default char star ted 空格 rontab 對於一些周期性事務,我們可以在Linux下,使用shell腳本調用mysql數據庫存儲過程,並設置定時任務。 本來是要mysql數據庫中創建事件任務來,定時執行存儲過程,做數據傳輸的。

LinuxC語言執行MySQL語句

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

LinuxC語言實現獲取當前時間

C語言獲取當前時間 簡介 在工作中,經常涉及到獲取當前時間,用於寫日誌,基於此,今特意利用C語言寫一個獲取時間函式,用於後面用到時,能夠及時查到。獲取當前時間,要用到time.h中的time()和localtime()函式,二者具體介紹與使用,參見 ht

說說在 linux 環境,如何新建 MySQL 資料庫例項

使用 secureCRT,遠端登入 linux 伺服器。 然後使用以下命令,登入 MySQL 伺服器: mysql -u<賬號> -p<密碼> 一般使用有新建資料庫許可權的賬號。 登入成功後,會出現歡迎提示: Welco

LinuxC語言實現C/S模式程式設計(附原始碼,執行截圖)

由標題可知,這篇部落格主要講如何用C語言實現一個C/S模式的程式。 主要功能:時間回送。 客戶機發出請求,伺服器響應時間,並返回伺服器時間,與客戶機進行同步。 廢話不多說,下面直接貼出原始碼。 程式碼如下: #include <stdio.h> #include

Linux 環境C/C++獲取系統時間 && 每隔500ms迴圈一次程式碼實現

環境:NetBeans IDE 8.2 + 遠端主機Linux 獲取當前系統時間getCurrentTime()程式碼如下: #include<sys/time.h> long getCurrentTime(){ struct timeval tv; gett

linuxC語言實現求CPU利用率

intr 21217894 119 18974 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 146350 0 647836 370 86696 3 146156 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

linuxC語言實現生產者消費者問題

問題描述: 緩衝區大小為N,生產者產生物品放到緩衝區,消費者將物品從緩衝區移走 互斥關係: 對緩衝區得訪問需要互斥,包括生產者和生產者之間、消費者和消費者之間、生產者和消費者之間。 同步關係:

Linuxc語言實現進度條

顏色的處理 要想把進度條加上顏色,我們只需要在需要顯示顏色的部分輸入顏色編號即可,但是要在最後用\033[0m關閉所有屬性,不然程式執行後會在執行後的後續文字中也變為我們之前所設定的顏色。 通過控制符即可設定我們需要的顏色: \033[30m– \033[

Linux系統C語言如何調用scalapack中的函數

lap inux *** col ocs ack cnblogs scala nal 在並行計算中經常需要調用scalapck(並行化的lapack)函數庫裏面的函數進行編程,這裏簡單介紹在C語言如何調用scalapck中的矩陣向量乘的函數。 註意:scalapack中的函

[轉載總結]Linux環境C++運行時動態鏈接庫加載要點總結

typedef symbol 類的方法 cout use per 解析 轉換 type 最近在看的一些web服務器源碼的擴展部分基本上都使用到了.so動態庫的運行時加載,也遇到了不少坑,看了不少網上的博客,在這裏稍微總結轉載一下,也是為了以後少走彎路。 首先需要了解的就是靜

測試環境搭建和部署(在Linux環境搭建jdk+Tomcat+mysql環境和項目包的部署)

pri 環境 安裝包 mysq 自己 進行 配置jdk linu 連接數   1.Linux環境(我搭建的是64位centos版本的linux系統)   1.下載並安裝一個VMware Workstation虛擬機,是搭建Linux系統的平臺。     2.下載一個

Linux環境c程序的編譯和執行

環境變量 動態 main.c tor direct 環境 沒有 stdlib.h share 1 單個文件的編譯和執行創建main.c文件,內容如下: #include <stdio.h> #include <stdlib.h> int main

Linux環境c程式的編譯和執行

1 單個檔案的編譯和執行建立main.c檔案,內容如下: #include <stdio.h> #include <stdlib.h> int main(void){ printf("Hello world!\n"); return 0; };   編譯:

ubuntuc語言mysql進行CRUD(增刪改查)

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

Linux系統C語言執行緒

先上程式碼 /* * gcc multiple_thread.c -lpthread -o multiple_thread */ #include <stdio.h> #include <pthread.h> #include <unistd

linux環境用GStreamer實現rtsp取流播放

最近研究Gstream的一些東西分享給大家,通過rtsp進行取流,playbin自行構建鏈路。 環境配置: Ubuntu16 之後自帶Gstreamer 的庫,可以直接用無需安裝 程式碼編譯執行前需要設定如下環境變數: export