在数据库里如何保存图片

zzz_zou 2010-11-23 08:44:09
我想知道的是:
1 是否可以使用SQL语句来保存,如果可以,如何保存,我使用navicat?
2 不能使用SQL来保存,那么使用C++ connect如何保存呢?
3 在数据库里存入大量图片对检索速度有影响吗?



谢谢大家。
...全文
450 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzz_zou 2010-11-27
  • 打赏
  • 举报
回复
谢谢大家~
zhu_terry 2010-11-26
  • 打赏
  • 举报
回复
存图片一般有两种方式,一种是存图片的相对路径。
一种就是以二进制直接将图片存入数据库。
个人比较推荐用前者,如果是直接存数据库的话,各种数据库略微有点不同,但一般都要借助于数据库的数据表中的二进制字段来实现。至于具体怎么存取这个二进制字段的话,每种数据库接口技术有其自身的API和帮助文档。比方微软的ADO中就有方法可以读存数据库的二进制字段。
shiter 2010-11-25
  • 打赏
  • 举报
回复
我也想把图片存在数据库中,在学生管理系统中每个人登录的时候显示出来?楼上说的好麻烦呀,学识不够啊。。有没有啥么好办法
shiter 2010-11-25
  • 打赏
  • 举报
回复
sql中所存储的图片是什么格式的,还是只存储图片的地址呢?
xumaojun 2010-11-25
  • 打赏
  • 举报
回复
具体方式与你访问数据库的方式有关,ODBC,ADO等,
如果是ADO方式访问数据库可以用安全数组SafeArray或者流的方式
zzz_zou 2010-11-25
  • 打赏
  • 举报
回复
我使用navicat 可以手动插入图片, 如果使用MFC,ADO接口, 网上也有C++代码。

我使用C++接口的,智能自己去读取图片,然后插入。
zzz_zou 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xianglitian 的回复:]

引用 4 楼 zzz_zou 的回复:
引用 3 楼 xianglitian 的回复:
我觉得数据库里最好存文件路径不要存文件实体
当然这只是个人拙见


若是一定要存呢!

这个我没尝试过
不敢妄言
[/Quote]

- -
我找到1个方法, 以2进制数据读取图片,然后将数据转化成16进制,在数据库中相应字段取long blob类型
然后 insert就可以了。~
向立天 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zzz_zou 的回复:]
引用 3 楼 xianglitian 的回复:
我觉得数据库里最好存文件路径不要存文件实体
当然这只是个人拙见


若是一定要存呢!
[/Quote]
这个我没尝试过
不敢妄言
zzz_zou 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xianglitian 的回复:]
我觉得数据库里最好存文件路径不要存文件实体
当然这只是个人拙见
[/Quote]

若是一定要存呢!
向立天 2010-11-24
  • 打赏
  • 举报
回复
我觉得数据库里最好存文件路径不要存文件实体
当然这只是个人拙见
zzz_zou 2010-11-24
  • 打赏
  • 举报
回复
我先自己顶起来 兄弟们 给力!
zzz_zou 2010-11-24
  • 打赏
  • 举报
回复
标准C++和C还是很多区别的。呵呵 比如字符串的处理。
ttxx3588679 2010-11-24
  • 打赏
  • 举报
回复
c++ 不太懂,和c区别大吗
zzz_zou 2010-11-24
  • 打赏
  • 举报
回复
文件流好像只能得到char, 如何得到unsigned char a


我使用的是标准C++对数据库进行操作的- -
手机写程序 2010-11-24
  • 打赏
  • 举报
回复
这里有个用ado保存jpg到access的例子.但字段是ole对象.
如果是到SQL server,网上也有例子.

http://www.vckbase.com/code/database/ado/ado_jpg.zip
conan_messi 2010-11-24
  • 打赏
  • 举报
回复
BOOL CMyRecordSet::SavePicToDb(LPSTR field, BYTE *picbuf,LONG bufsize)
{
SAFEARRAYBOUND rgsabound;
rgsabound.lLbound = 0;
rgsabound.cElements = bufsize;
SAFEARRAY *psa=::SafeArrayCreate(VT_UI1,1,&rgsabound);


for(LONG i=0;i<bufsize;i++)
::SafeArrayPutElement(psa,&i,picbuf++);

variant_t data;
data.vt=VT_ARRAY|VT_UI1;
data.parray=psa;


m_pRecordset->PutCollect(field,data);
//更新数据库操作
m_pRecordset->Update();



//释放空间
::SafeArrayDestroyData(psa);

return TRUE;

}
青稞 2010-11-24
  • 打赏
  • 举报
回复
读出来的数据,你直接存到unsigned char数组中去就可以了啊。。
yyl2bb 2010-11-24
  • 打赏
  • 举报
回复
将图片转成数据流吧?
zzz_zou 2010-11-24
  • 打赏
  • 举报
回复
7楼朋友的方法确实可以,不过读到的东西,我不会转化, 其实我最终是想实现以16进制方式读取图片数据,并保存在一个数组当中的。

可是我发现读到的char类型都很诡异, 图片我记得貌似要使用unsigned char来保存的, 用文件流貌似无法直接得到unsigned char啊~

char可以转化成unsigned char吗, 谢谢大婶教导,

还有我问的第3个问题怎么没人回答啊, 数据库高手呢~
zzz_zou 2010-11-24
  • 打赏
  • 举报
回复
我先试试, 谢谢大婶

8楼的朋友 的确无敌。
加载更多回复(4)

4,018

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧