有時我們用資料庫儲存檔案,需要用到二進位製欄位,下面列常用方法。
1.寫二進位制資料
sqlite3 * db;
int result;
char **errmsg =null;
result = sqlite3_open("test.db", &db );
if( result != sqlite_ok )
result = sqlite3_exec( db,"create table tb( id integer, content blob)", null, null, errmsg);
if(result != sqlite_ok)
char *buffer;//要寫的二進內容,也可以從檔案讀出來
buffer=new char[1024*1024];
for(int i=0;i<1024*1024;i++)buffer[i]='a';
sqlite3_stmt *stat;//寫二進位制資料時要用的結構
sqlite3_prepare( db, "insert into tb( id, content) values( 10, ? )", -1, &stat, 0 );//準備插入資料
sqlite3_bind_blob( stat, 1, buffer, strlen(buffer), null ); //把內容和字段繫結
result=sqlite3_step( stat );//執行
sqlite3_finalize( stat );釋放記憶體
sqlite3_close( db );
2.讀二進位制資料
這裡重點介紹一下sqlite3_blob_open函式
這個函式用於開啟二進位製欄位資料
第乙個引數是資料庫控制代碼
第二個引數是資料庫名
第三個引數是表名
第四個引數是二進位制資料字段(列)名
第五個引數是行數,也就是開啟第幾行的字段。
第六個第七個引數是二進位制檔案控制代碼
用這個函式打二進位製字段就像開啟檔案一樣簡單。
下面為例子**:
sqlite3 * db;
int result;
char **errmsg =null;
result = sqlite3_open("test.db", &db );
if( result != sqlite_ok )
int rf= sqlite3_blob_open(db,null,"tbl_2","file_content",1,1,&sqlite3_blob);
if(rf!= sqlite_ok)return –1;
int len=sqlite3_blob_bytes(sqlite3_blob);//得到二進資料長度
sqlite3_blob_read(sqlite3_blob,buffer,len,0); 讀二進資料,最後乙個引數為起始位置
//如果不想讀全部內容,可以設定這個引數
sqlite3_blob_close(sqlite3_blob);//關閉
sqlite3_close( db );
3.幾個問題
a. sqlite3_blob_open函式第五個引數讀第幾行的資料,不知道通過什麼函式能得到當前行的絕對行數,而sqlite3_total_changes函式只能得更改行的相對行數。
b. sqlite3_blob_write函式是用於寫二進位制資料,但這個函式只能用於修改二進位制資料,不能用於插入二進位制資料,而寫資料的時候長度不能超過第一次插入資料時的長度。
我希望儲存的單個二進資料字段可能有幾個g的容量,而且隨時有可能修改,長度會不斷變化,用sqlite3_stmt顯然是不行的,而 sqlite3_blob_write函式又不能改變二進資料字段的長度,是我對sqlite了解的不多,還是這個資料庫本身就有這個限制 ,希望高手能夠指點。
sqlite 二進位製欄位 zz
有時我們用資料庫儲存檔案,需要用到二進位製欄位,下面列常用方法。1.寫二進位制資料 sqlite3 db int result char errmsg null result sqlite3 open test.db db if result sqlite ok result sqlite3 exe...
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...
判斷二進位製半整數(二進位制)
10年後,tokitsukaze大佬已經變成了年收入超百萬的的精英程式設計師,家裡沒錢也沒礦的teitoku,找tokitsukaze大佬借1000塊錢,然後tokitsukaze大佬說,借你1024吧,湊個整數。沒錯在2進製下1024是 二進位制整數 乙個正整數滿足其值為2的k次方 k為正整數 我...