2011-10-19 25 views
2

有沒有寫一個字節數組到VARBINARY或(其他解釋我) 即時尋找在使用一個功能是在MySQL不一樣的happend的數據我做功能可按這樣的使用c連接器向mysql寫入一個字節數組?

bool writeBinary(char * someQuery, LPBYTE buffer) 
{ 
} 

任何聰明的方法緩衝

void CDBManager::SetBinary(const char * lpszStatement, LPBYTE lpBinaryBuffer, 
ULONG BinaryBufferSize) 
{ 
MYSQL_STMT *stmt; 
MYSQL_BIND bind[1]; 
char * shhh = new char[BinaryBufferSize]; 
// ---- 
memcpy(shhh, lpBinaryBuffer, BinaryBufferSize); 

stmt = mysql_stmt_init(&getDB()->m_hMySQL); 
printf("\n"); 
if(BinaryBufferSize >= 2752) 
{ 
    for(int i = 0; i < BinaryBufferSize; i++) 
    { 
     if(lpBinaryBuffer[i] == 0xFF && 
       lpBinaryBuffer[i+1] == 0xFF && lpBinaryBuffer[i+2] == 0xFF && lpBinaryBuffer[i+3] == 0xFF && lpBinaryBuffer[i+4] == 0xFF && lpBinaryBuffer[i+5] == 0xFF && 
        lpBinaryBuffer[i+6] == 0xFF && lpBinaryBuffer[i+7] == 0xFF && lpBinaryBuffer[i+8] == 0xFF && lpBinaryBuffer[i+9] == 0xFF && lpBinaryBuffer[i+10] == 0xFF && 
        lpBinaryBuffer[i+11] == 0xFF && lpBinaryBuffer[i+12] == 0xFF && lpBinaryBuffer[i+13] == 0xFF && lpBinaryBuffer[i+14] == 0xFF && lpBinaryBuffer[i+15] == 0xFF) 
     { 
     } 
     else 
     { 
      printf("[%d] %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n", i, lpBinaryBuffer[i], 
       lpBinaryBuffer[i+1], lpBinaryBuffer[i+2], lpBinaryBuffer[i+3], lpBinaryBuffer[i+4], lpBinaryBuffer[i+5], 
        lpBinaryBuffer[i+6], lpBinaryBuffer[i+7], lpBinaryBuffer[i+8], lpBinaryBuffer[i+9], lpBinaryBuffer[i+10], 
        lpBinaryBuffer[i+11], lpBinaryBuffer[i+12], lpBinaryBuffer[i+13], lpBinaryBuffer[i+14], lpBinaryBuffer[i+15]); 
     } 
     i+=15; 
    } 
} 
printf("\n"); 

if(stmt == NULL) 
{ 
    fprintf(stderr, " mysql_stmt_init(), out of memory\n"); 
} 
else if(mysql_stmt_prepare(stmt, lpszStatement, strlen(lpszStatement))) 
{ 
    fprintf(stderr, " mysql_stmt_prepare(), INSERT failed\n"); 
    fprintf(stderr, " %s\n", mysql_stmt_error(stmt)); 
} 
else 
{ 
    memset(bind, 0, sizeof(bind)); 
    // ---- 
    bind[0].buffer_type  = MYSQL_TYPE_BLOB; 
    bind[0].buffer   = (char *)shhh; 
    bind[0].buffer_length = BinaryBufferSize; 
    bind[0].is_null   = 0; 
    bind[0].length   = 0; 
    // ---- 
    // allways filed? what? this calls they are good, i made by example on mysql.com so what dont work 
    // it always return len 0 => no data saved in db 
    if(mysql_stmt_bind_param(stmt, bind)) 
    { 
     fprintf(stderr, " mysql_stmt_bind_param() failed\n"); 
     fprintf(stderr, " %s\n", mysql_stmt_error(stmt)); 
    } 
    else if(mysql_stmt_execute(stmt)) 
    { 
     fprintf(stderr, " mysql_stmt_execute(), 1 failed\n"); 
     fprintf(stderr, " %s\n", mysql_stmt_error(stmt)); 
    } 
} 
// ---- 
delete shhh; 

}

感謝

回答

0

您綁定之間以及執行中, DD以下行團塊數據上傳到服務器側:

* mysql_stmt_send_long_data({語句},{場數},{數據},{數據長度}); *

if(mysql_stmt_send_long_data(stmt, 2, (const char*)ser.data(), data_length)) { 
    ERROR("dehydrate : failed to send long data : %s", mysql_stmt_error(stmt)); 
    goto abort; 
} 

的字段編號是從零開始的,並且在您的情況下將爲0,因爲您只有1字段。

另外,blob類型最多隻支持64k,您可能需要最多1GB的「長blob」數據類型。