C++ MySQL存储二进制数据
来源:互联网 发布:手机有些软件打不开 编辑:程序博客网 时间:2024/05/21 17:11
0x01
首先MySQL支持二进制的类型有Blob:
MySQL的四种BLOB类型
类型 大小(单位:字节)TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
0x02
插入二进制数据时需要利用mysql_real_escape_string函数对数据进行转换
0x03
读取二进制数据时需要利用mysql_fetch_length函数字段长度,该函数需要在mysql_fetch_row调用后才可以正常获取结果
0x04
写入例子:
int CFinger_PrintDlg::Connect_Mysql(byte b_name[], byte* b_data,int len_of_data) {const char user[] = "root";const char pswd[] = "toor";const char host[] = "127.0.0.1";const char db[] = "Fingerprint";int res;int listrow = 0;char sql_buf[100] = {};unsigned int port = 3306;bool return_result = false;MYSQL myCont;MYSQL_RES *result;MYSQL_ROW sql_row;HWND hWnd = GetSafeHwnd();TCHAR sql_buf_t[100] = {};//CListCtrl* list = (CListCtrl*)GetDlgItem(IDC_LIST3);mysql_init(&myCont);if (mysql_real_connect(&myCont, host, user, pswd, db, port, NULL, 0)){PostMessage(WM_MyMessage, (WPARAM)&L"连接数据库成功!!", (LPARAM)NULL);}mysql_query(&myCont, "SET NAMES GBK"); //设置编码格式char buf[2000] = { NULL };unsigned int escape_size = 2 * len_of_data + 2;char* escape_object = (char *)malloc(escape_size);escape_size = mysql_real_escape_string(&myCont, (char*)escape_object, (char *)b_data, len_of_data);int sql_len = sprintf_s(buf, "insert into finger3(info) values('%s')", escape_object);res = mysql_real_query(&myCont,buf, sql_len);if (!res){return_result = TRUE;if (!res){PostMessage(WM_MyMessage, (WPARAM)L"写入成功", NULL);}}else{PostMessage(WM_MyMessage, (WPARAM)L"写入失败", NULL);}mysql_close(&myCont);return return_result;}
读取操作:
void* CFinger_PrintDlg::Read_Mysql(){if (!g_connect){SendMessage(WM_MyMessage, (WPARAM)L"数据库未连接...", NULL);return 0;}MYSQL_RES *res = NULL;MYSQL_ROW row;unsigned long *row_len;char *object = NULL;//const char *sql = "select info from final where id=";char sql[100] = { NULL };unsigned long objsize;int ret;for (int i = 1; i <= 10; i++){sprintf_s(sql, "select info from final where id='%d'", i);ret = mysql_real_query(&myCont, sql, strlen(sql));if (ret){PostMessage(WM_MyMessage, (WPARAM)L"读取失败1", NULL);}res = mysql_store_result(&myCont);if (res == NULL){PostMessage(WM_MyMessage, (WPARAM)L"读取失败2", NULL);}/* important */row = mysql_fetch_row(res);row_len = mysql_fetch_lengths(res); /* get the object's length */if (row_len == NULL){PostMessage(WM_MyMessage, (WPARAM)L"读取失败3", NULL);}objsize = row_len[0];object = (char*)malloc(objsize);if (object == NULL){PostMessage(WM_MyMessage, (WPARAM)L"读取失败4", NULL);}memcpy(object, row[0], objsize);if (BIOKEY_DB_ADD(ZKFingerHandle, i, objsize, (byte*)object)){PostMessage(WM_MyMessage, (WPARAM)L"读取成功", NULL);}}g_connect = false;;//mysql_close(&myCont);mysql_free_result(res);return NULL;}
0x06
更新操作:
int CFinger_PrintDlg::Updata_Mysql(byte b_name[], byte* b_data, int len_of_data){if (!g_connect){SendMessage(WM_MyMessage, (WPARAM)L"数据库未连接...", NULL);return 0;}int res;bool return_result = false;mysql_query(&myCont, "SET NAMES GBK"); //设置编码格式char buf[2000] = { NULL };unsigned int escape_size = 2 * len_of_data + 2;char* escape_object = (char *)malloc(escape_size);escape_size = mysql_real_escape_string(&myCont, (char*)escape_object, (char *)b_data, len_of_data);CString id_cs;CString name_cs;int id;char name[20] = { NULL };GetDlgItem(IDC_EDIT1)->GetWindowTextW(id_cs);GetDlgItem(IDC_EDIT2)->GetWindowTextW(name_cs);id = _wtoi(id_cs);WideCharToMultiByte(CP_ACP, 0, name_cs, -1, name, name_cs.GetLength(), NULL, NULL);//int sql_len = sprintf_s(buf, "insert into final(id,name,info) values('%d','%s','%s')", id, name, escape_object);//UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值int sql_len = sprintf_s(buf, "UPDATE final SET name='%s',info='%s' where id ='%d'", name, escape_object, id);res = mysql_real_query(&myCont, buf, sql_len);if (!res){return_result = TRUE;if (!res){PostMessage(WM_MyMessage, (WPARAM)L"更新成功", NULL);}}else{PostMessage(WM_MyMessage, (WPARAM)L"更新失败", NULL);}//mysql_close(&myCont);g_connect = false;return return_result;}
0 0
- MySQL存储二进制数据
- MySQL存储二进制数据
- C++ MySQL存储二进制数据
- mysql数据库存储二进制数据 linux
- 在Mysql中用 LONGBLOB 类型存储二进制数据
- 在Mysql中用 LONGBLOB 类型存储二进制数据
- VB二进制存储数据
- 二进制数据存储
- C、C++写二进制数据到mysql的Blob字段
- C语言写二进制数据到mysql的Blob字段
- C、C++写二进制数据到mysql的Blob字段
- C语言写二进制数据到mysql的Blob字段
- mysql存取二进制数据
- 用mysql存储二进制数据流
- 用mysql存储二进制数据流
- 用mysql存储二进制数据流
- postgres存储二进制数据java
- Dbms_LOB存储二进制,文本数据
- cordova+ios插件
- bzoj4066: 简单题
- CI数据库参考
- acos数学函数应用实例
- POJ——1611The Suspects(启发式并查集+邻接表)
- C++ MySQL存储二进制数据
- 利用SQLyog管理数据库
- runstats脚本分析不同的sql资源使用
- 通过隐式Intent展示网页 --8
- Java SE语法——数组
- 解决spring-security-oauth2 导入包冲突
- 向下一个活动传递数据 --9
- Python核心编程 第九章练习
- UVa455--Periodic Strings