1. 程式人生 > >C語言中通過sprintf()函式構造sql語句

C語言中通過sprintf()函式構造sql語句

一、C語言如何構造sql

做專案時,由嵌入式開發慢慢涉及到後臺開發,接觸資料庫慢慢就多了,一般情況下,sql定義成一個char *,或者一個字元陣列,裡面就寫sql語句就行了。例如:

    char *sql;
    sql = "create table job_table(" \
            "task_id       int  primary key not NULL," \
            "point_tag     int not NULL," \
            "task_serial  int," \
            "device_tag   int);"
;

job_table結構如下:
這裡寫圖片描述

但是組成sql插入變數該怎麼辦呢?

  • 使用strcat將兩個char型別連結
  • sprintf()函式構造sql語句

第一種方式比較麻煩,還要將變數進行類系轉換,記錄下第二種方式
虛擬碼:

    char* insertJob;
    char sql[255];
    int a=1;
    int b=1;
    int c=1;
    int d=1;
    insertJob = "INSERT INTO job_table (task_id,point_tag,task_serial,device_tag) VALUES ("
; sprintf(sql,"%s%d%s%d%s%d%s%d%s", insertJob, a, ",", b, ",", c, ",", d, ")");

二、sprintf()函式

int sprintf(char *str, const char *format, ...)

  • 傳送格式化輸出到 str 所指向的字串。
  • str – 這是指向一個字元陣列的指標,該陣列儲存了字串。
  • format– 這是字串,包含了要被寫入到字串 str 的文字。它可以包含嵌入的 format 標籤,format 標籤可被隨後的附加引數中指定的值替換,並按需求進行格式化。format標籤屬性是%[flags][width][.precision][length]specifier
  • 如果成功,則返回寫入的字元總數,不包括字串追加在字串末尾的空字元。如果失敗,則返回一個負數。

format中的specifier則是最為常用與關注的

specifier(說明符) 輸出
c 字元
d或i 有符號十進位制整數
e 使用 e 字元的科學科學記數法(尾數和指數)
E 使用 E 字元的科學科學記數法(尾數和指數)
f 十進位制浮點數
g 自動選擇 %e 或 %f 中合適的表示法
G 自動選擇 %E 或 %f 中合適的表示法
o 有符號八進位制
s 字串
u 無符號十進位制整數
x 無符號十六進位制整數
X 無符號十六進位制整數(大寫字母)
p 指標地址
n 無輸出
% 字元