怎样在oracle中存取图片? 大家都没用oracle存取过图片吗?是不是只存图片的路径呀?哪oracle设置的BLOB格式的数据类型干什么用呀? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以将图片存到数据库中,也可以只把目录存到数据库中.存图片可以通过建pl/sql存储过程实现.取图片我没有做过. 可以存取图片等任意文件,可通过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); 顺便把从数据库写到本地硬盘也加上:定义的结构都一样,主要如下: 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 ); 有没有诸如INSERT 之类的简单的语句就可以解决的? 好像可以以二进制流的形式存储在Blob字段中吧,学习中... oracle展现明细加小计合计 求助:一个统计的算法 请教关于alter table [tablename] move的问题和高水位相关的问题 初始化参数文件???&协议适配器???&... 问几个管理的问题,分不够另加! 新手,数据库基础问题 一个超级难的问题,高手帮忙! 查询第100~150条的记录,只能用标准SQL语句,能做么? 在oracle9i中怎样连接其它异构数据库? PIV的机器是不是装不了oracle(高分求答) 求sql语句,分数不多,望各位大虾帮忙 Windows2003+Oracle9i无法启动问题。
存图片可以通过建pl/sql存储过程实现.
取图片我没有做过.
读取时,反之。具体主要代码如下:
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);
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 );