怎样在oracle中存取图片?
我用vc做了一个程序,牵扯到在oracle数据库中存取图片的问题,不知道怎么存取。 问题点数:20、回复次数:15Top
1 楼starytx(此地禁止大小便,违者没收工具!)回复于 2005-08-31 08:44:54 得分 0
大家都没用oracle存取过图片吗?是不是只存图片的路径呀?哪oracle设置的BLOB格式的数据类型干什么用呀?Top
2 楼dnmyg2003(毛毛)回复于 2005-08-31 13:42:32 得分 5
可以将图片存到数据库中,也可以只把目录存到数据库中.
存图片可以通过建pl/sql存储过程实现.
取图片我没有做过.Top
3 楼starytx(此地禁止大小便,违者没收工具!)回复于 2005-08-31 13:53:18 得分 0
我觉得能存就应该能取,大侠能否具体说说怎么存?有示例代码最好,谢谢了Top
4 楼xusup(杂菜手)回复于 2005-08-31 14:11:06 得分 10
可以存取图片等任意文件,可通过pro*c来实现。定义三个结构,分别为blob,table,table_ind(存在null值时候使用)。然后通过c的fopen以b方式打开,,fread写入定义好的结构变量中,再用insert语句插入到db中即可。
读取时,反之。具体主要代码如下:
typedef struct {
long len;
char dat[4096000];
} archive_t;
typedef struct {
long seq; /* seq NUMBER(6) */
char file_name[33]; /* file_name VARCHAR2(32) */
ORA_DATE time_stamp; /* time_stamp DATE() */
long file_size; /* file_size NUMBER (8) */
archive_t archive; /* archive LONG RAW() */
} bs_install_files_t;
typedef struct {
short seq_Ind; /* seq */
short file_name_Ind; /* file_name */
short time_stamp_Ind; /* time_stamp */
short file_size_Ind; /* file_size */
short archive_Ind; /* archive */
} bs_install_files_Ind_t;
bs_install_files_t bs_install_files;
bs_install_files_Ind_t bs_install_filesInd;
EXEC SQL VAR bs_install_files.file_name IS VARCHAR2(32);
EXEC SQL VAR bs_install_files.archive IS LONG VARRAW(4096000);
if( (fp = fopen( FileName, "rb" )) == NULL ) {
fprintf( stderr, "%s:OPEN ERROR,\n", FileName );
return -1;
}
numread = fread( bs_install_files.archive.dat, sizeof( char ), bs_install_files.archive.len, fp );
EXEC SQL WHENEVER SQLERROR GOTO sql_error;
EXEC SQL
insert
into bs_install_files
values (:bs_install_files:bs_install_filesInd)
;
sql_error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
printf("%s\n",sqlca.sqlerrm.sqlerrmc);
Top
5 楼xusup(杂菜手)回复于 2005-08-31 14:18:59 得分 0
顺便把从数据库写到本地硬盘也加上:定义的结构都一样,主要如下:
memset( &bs_install_files, 0x00, sizeof(bs_install_files) );
memset( &bs_install_filesInd, 0xff, sizeof(bs_install_filesInd) );
EXEC SQL
declare c_bs_install_files cursor for
select * from
bs_install_files;
EXEC SQL open c_bs_install_files ;
EXEC SQL
fetch c_bs_install_files
into
:bs_install_files:bs_install_filesInd;
if( (fp = fopen( FileName, "wb" )) == NULL ) {
fprintf( stderr, "%s:OPEN ERROR,\n", FileName );
return -1;
}
numwritten = fwrite( bs_install_files.archive.dat, sizeof( char ), bs_install_files.archive.len, fp );
Top
6 楼starytx(此地禁止大小便,违者没收工具!)回复于 2005-08-31 14:28:59 得分 0
这么复杂呀,小弟太菜,看不大懂,这可怎么办呀?Top
7 楼starytx(此地禁止大小便,违者没收工具!)回复于 2005-08-31 15:18:01 得分 0
有没有诸如INSERT 之类的简单的语句就可以解决的?Top
8 楼starytx(此地禁止大小便,违者没收工具!)回复于 2005-09-01 08:32:15 得分 0
upTop
9 楼guoguo902(笨)回复于 2005-09-01 10:30:13 得分 1
好像可以以二进制流的形式存储在Blob字段中吧,学习中...Top
10 楼starytx(此地禁止大小便,违者没收工具!)回复于 2005-09-02 15:32:31 得分 0
upTop
11 楼yuanshaoyu(燕少玉)回复于 2005-09-03 14:22:58 得分 1
upTop
12 楼starytx(此地禁止大小便,违者没收工具!)回复于 2005-09-05 08:31:01 得分 0
upTop
13 楼lovejackchen(九龙冰封)回复于 2005-09-05 17:32:56 得分 1
upTop
14 楼cow977(牛)回复于 2005-09-05 19:03:32 得分 1
写个程序,什么语言都可以。Top
15 楼zwj0712(阿张)回复于 2005-09-05 19:37:57 得分 1
我感觉到存目录还是比较好的啊,程序直接取图片名就可以了!Top




