数据表字段类型BLOB读写数据的语句如何写?
请专家们指点。最好有例子,谢谢!
请专家们指点。最好有例子,谢谢!
解决方案 »
- 求一个定时删除任务
- 9万条数据,用select*全部查询mysql数据库,数度超级慢,求解.
- 问个小问题c:/和c:\
- 把前四个字段用CONCAT函数连接,把连接后的字段昨晚第五个字段,怎么写SQL语句
- 求助:SQL查询
- you have an error in your sql syntax;check the manual
- 查询排名
- 出现 mysql 错误 !!
- 请教:mysql中有没有类似oracle中(+)的功能?
- 表存在,表数据文件也存在,报ERROR 1146 (42S02): Table 'xxx.xxx' doesn't exist
- mysql4.026 怎样修改 max_connections 等等的配置参数
- 表明作为游标的参数
http://topic.csdn.net/t/20030612/15/1907712.html# MySQL C API 存取 blob这种例子应该很多了。 通过C读你的 图片二进制文件然后update到mysql
void CBlobDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CFileDialogEx dlg(TRUE,_T(""),_T(""),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("照片文件(*.jpg)|*.jpg|"));
if(IDOK==dlg.DoModal()){
m_detail_picpath=dlg.GetPathName();
UpdateData(FALSE);
}
}void CBlobDlg::OnButton2()
{
UpdateData(TRUE);
// TODO: Add your control notification handler code here
char *opt_host_name = "vmxpcn";
char *opt_user_name = "root";
char *opt_password = "admin888";
unsigned int opt_port_num = 3306;
char *opt_socket_name = NULL;
char *opt_db_name = "wipdebug";
unsigned int opt_flags = 0;
MYSQL *conn;
FILE *f;
conn = mysql_init (NULL);
mysql_real_connect (conn, opt_host_name, opt_user_name, opt_password,
opt_db_name, opt_port_num, opt_socket_name, opt_flags);
if ((f = fopen (m_detail_picpath, "rb")) == NULL)
{
printf("file open eror!");
return;
}
load_image (conn, f);
fclose(f);
mysql_close (conn); }void CBlobDlg::load_image(MYSQL *conn, FILE *f)
{
char query[1024*200], buf[1024*100], *p;
unsigned long from_len;
sprintf(query,"insert into repair_process (RPIssuePic) values ( \'" );
p = query + strlen (query);
while ((from_len = fread (buf, 1, sizeof (buf), f)) > 0)
{
if (p + (2*from_len) + 3 > query + sizeof (query))
{
printf("image too big");
return;
}
p += mysql_real_escape_string (conn, p, buf, from_len);
}
*p++ = '\'';
*p++ = ')';
strcpy(p," where RPId=1");
// mysql_query(conn,"set character set gbk");
// TRACE(((char*)mysql_error(conn)));
mysql_real_query (conn, query, (unsigned long) (p- query)); TRACE(((char*)mysql_error(conn)));
}
插入示例图片:Blue hills.jpg没问题
插入示例图片:Sunset.jpg提示:Data too long for column 'RPIssuePic' at row 1
int CmysqlDatabase::UpdateBlob(Data_Param *para, FILE *f)
{
char query[1024*800],buf[1024*100],*p=NULL,cwhere[256];
unsigned long blob_len;
mysql_query(&mysql,"set names 'utf8'"); //这一行很重要,否则可能会上传失败
sprintf(query,"update %s set %s = \'",para->tab_name, para->set_exp);
p = query + strlen (query);
unsigned int bufsize = sizeof(buf);
while((blob_len = fread (buf, 1, bufsize, f)) > 0)
{
if(p + (2*blob_len) + 3 > query + sizeof (query))
{
TRACE("image too big\n");
return false;
}
p += mysql_real_escape_string(&mysql, p, buf, blob_len);
}
*p++ = '\'';
sprintf(cwhere," where %s",para->where_def);
int wherelen = strlen(cwhere);
memcpy(p,cwhere,wherelen);
p += wherelen; unsigned long lsize = (unsigned long)(p-query);
if(mysql_real_query(&mysql, query, lsize))
{
TRACE(((char*)mysql_error(&mysql)));
return false;
}
TRACE(((char*)mysql_error(&mysql)));
return true;
}//下面是调用
FILE *f;
if((f = fopen(m_issue_picpath, "rb")) == NULL)
{
TRACE("file open eror!\n");
m_issue_picpath = "照片文件打开失败!";
UpdateData(FALSE);
return;
}
theApp.mData.tab_name = "repair_process";
strwhere.Format("RPId = \'%d\'",iInsertId);
theApp.mData.where_def = (LPSTR)(LPCTSTR)strwhere;
strExp.Format("RPIssuePic");
theApp.mData.set_exp = (LPSTR)(LPCTSTR)strExp;if(theApp.mwipd.UpdateBlob(&theApp.mData,f))
{
TRACE("更新照片成功!\n");
}
else
m_issue_picpath = "更新照片失败!";
fclose(f);