c mysql二進位制訪問,blob訪問

2021-06-20 22:41:59 字數 2274 閱讀 7446

取二進位制資料:

一樣的sql語句,查詢出來即可。只不過二進位制資料是個資料塊,需要得到資料塊的大小和資料指標。

bool cmysqlaccess::getbinaryfield(int ncol,char* &pdataout,int& ndatalen)

else

}像通常一樣查詢後,得到結果集,然後得到第ncol列結果,返回二進位制指標結果和二進位制長度。返回後必須立馬處理或者儲存乙份。否則mysql將資料銷毀,指標所指資料則無效了。

存二進位制資料:

mysql語句接受的sql語句都是string,以'\0'結尾的。如果冒然插入二進位制資料到sql語句中,要麼報錯,要麼儲存錯誤。此處可以通過mysql提供的函式將資料轉換一下即可。

char* cmysqlaccess::convertbinarytostring(char* pbinarydata,int nlen)

上面這個函式只能單執行緒使用啊,將一塊二進位制資料轉換為mysql可識別的string資料。這樣就直接可以通過mysql的sql語句insert,update來對blob資料進行更新和插入了,sql語句用法不變。

用例:std::ostringstream strsql;

strsql<<"insert into "assert(m_pdbaccess);

m_pdbaccess->executesql(strsql.str());

playerdata是blob二進位制型別,pdata是指向乙個結構體的指標,nlen是結構體的大小。

上面就可以實現二進位制的儲存了。

方法二:

上面的方法,你會發現,你每次都需要轉換資料,傳指標,傳大小等一系列複雜操作,是不是順序很混亂,過程很繁雜。mysql也為你提供了另外一種方法,那就是mysql_bind。將資料操作統一化,統一麻煩化。mysqlbind是乙個結構體,根據個人不同需求填充各個資料成員可以儲存任意型別資料,當然包括blob。

bool cmysqlaccess::setbinaryfield(std::string& strcondition,void* pdatain,int ndatalen)}}

int nres=getdberrorcode();

clogoutstream errlog(crazy::error_level,this_class_name);

errlog<<"mysql query failed:\""《這個是對某一列blob資料進行存操作。pdatain和ndatalen分別是乙個struct結構體和結構體大小。填充完畢mysqlbind之後即可對資料庫二進位制列進行儲存了。可能你會問,沒有指定哪一列呢,對。哪一列是在strcondition語句裡面的,這是乙個預處理語句。在預處理語句裡面,有乙個符號: ? 。問號,問號的位置代表了mysqlbind資料對應的位置。

insert into test_table(date_field, time_field, timestamp_field) values(?,?,?)

上面這個語句,有3個問號,三個問號分別對應test_table的三列.每個問號呢又對應乙個mysqlbind資料結構。那麼我們在mysql_stmt_bind_param函式呼叫時,就應該傳入乙個mysql_bind 陣列。mysql_bind    m_mysqlbind[3].

填充整個陣列資料,即對應三個問號內容。

用例:mysql_bind bind[3];

mysql_stmt *stmt;

strmov(query, "insert into test_table(date_field, time_field, timestamp_field) values(?,?,?");

//初始化stmt

stmt = mysql_stmt_init(mysql);

//預處理語句

mysql_stmt_prepare(mysql, query, strlen(query));

//初始化引數

bind[0].buffer_type= mysql_type_date;

bind[0].buffer= (char *)&ts;

bind[0].is_null= 0;

bind[0].length= 0;

bind[1]= bind[2]= bind[0];

//繫結引數123

mysql_stmt_bind_param(stmt, bind);

//執行預處理mysql語句

mysql_stmt_execute(stmt);

還沒看懂就個人去看mysql文件了,其實裡面講得很清楚,只要找對幾個函式,就可以把search出來了

本文**:

C MySQL儲存二進位制資料

0x01 首先mysql支援二進位制的型別有blob mysql的四種blob型別 型別 大小 單位 位元組 tinyblob 最大 255 blob 最大 65k mediumblob 最大 16m longblob 最大 4g 0x02 插入二進位制資料時需要利用mysql real escap...

python numpy二進位制訪問

根據資料特點,調整儲存占用的空間大小。因為陣列中全是0和1,所以用單位元組 np.int8 儲存。如果是浮點或其他格式,可以用其他型別。存 f open c,ab d1 np.array 0,0,1 dtype np.int8 f.write d1 3 d2 np.array 0,1,1 dtype...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...