求助:有没有人向oracle的数据库中存过图片?请进来看看,真的很急!!! 今天查了查原来的文章 发现有不少用blob的,不过我怎么存不上啊? 老兄解决后别忘了告诉我一声 当然,如果我弄懂了,会告诉你的 :) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该是有图片的格式的,在delphi中使用只需要将数据流赋给image,不过不支持gif 我用过Delphi和Oracle存储图片,将数据库存储图片的字段定义为blob,通过Delphi的与数据库字段相连的DBImage控件将图片存储到数据库,存储后是二进制,但是无法单独操作该字段,只能通过DBImage控件来中转。 补充说明:在Oracle存储过程中是无法操作该字段,否则就出错。你可以试一试噢!^_^ 当然是用blob字段拉,先转换成二进制,再保存 ole数据头,是access的一个特性,oracle好像没有,把2进制流存放在blob中。 我昨天查了一天,发现10多份资料都是抄的同一个人的,而且我还存不起,好像是外部文件指针出错,错误报告说打不开文件。楼主搞懂了也告诉俺一声,谢了。[email protected] 今天请教了一个牛人,用的其他的方式,可以将任何文件写入数据库,大致的思路是将文件读到内存里,在内存里的文件自然是二进制的啦,在将这一段数据插到数据库里就完了,用BC写的代码插入如下: String insertsql; TMemoryStream *ms = new TMemoryStream; //BC的流存储类 ms->Clear(); ms->LoadFromFile(MyFileName);//将文件读入该流式变量,MyFileName为读入文件的完整路径 insertsql=" insert into lin_tmp(dll_name,VERSION_NUMBER,DLL_FILE,FILE_DIR) "; insertsql +=" values ('"+Edit3->Text+"','"+Edit1->Text+"',:p3,'"+MyFileName+"') " ; //数据插入SQL Query1->Close(); Query1->SQL->Clear(); Query1->SQL->Add(insertsql); Query1->Params->Items[0]->LoadFromStream(ms,ftBlob);//申明MS这个流式变量以BLOB格 Query1->Prepare(); 式写入数据库 Query1->ExecSQL(); 大致思路如上,结合特定的语言改吧,希望能有帮助。 我有一份,已经测试成功了import java.io.*;import java.sql.*;public class InsertBlob {public static void main(String args[]) {String username;String password;String url;String dropString;String createString;username = "kr863";password = "krsoft";// The URL that will connect to TECFA's MySQL server// Syntax: jdbc:TYPEachineort/DB_NAMEurl = "jdbc:oracle:thin:@172.16.0.4:1521:frerp";// ---- configure END// INSTALL/load the Driver (Vendor specific Code)try {Class.forName("oracle.jdbc.driver.OracleDriver");} catch(java.lang.ClassNotFoundException e) {System.err.print("ClassNotFoundException: ");System.err.println(e.getMessage());}try {Connection con;Statement stmt;// Establish Connection to the database at URL with usename and passwordcon = DriverManager.getConnection(url, username, password);System.out.println ("Ok, connection to the DB worked. Let's see if we can insert something:");// con.setAutoCommit(false);//获取image的路径String image = "F:\\linsr\\upload\\11.gif";//转换成file格式File file = new File(image);//将文件的长度读出,并转换成Long型long l1=file.length();int l2=(int)l1;//以流的格式赋值FileInputStream fis=null;try{fis = new FileInputStream(file);} catch(FileNotFoundException e) {}PreparedStatement ps = con.prepareStatement("insert into test_img values (?,?,?)");ps.setInt(1,2);ps.setString(2,file.getName());ps.setBinaryStream(3,fis,l2);ps.executeUpdate();ps.close();try{fis.close();} catch(IOException e) {}System.out.println ("Image Items have been inserted, you can now run the QueryCoffees program");// Close resources// stmt.close();con.close();}// print out decent erreur messagescatch(SQLException ex) {System.err.println("==> SQLException: ");while (ex != null) {System.out.println("Message: " + ex.getMessage ());System.out.println("SQLState: " + ex.getSQLState ());System.out.println("ErrorCode: " + ex.getErrorCode ());ex = ex.getNextException();System.out.println("");}}}}自己建一个表TEST_IMG相应地改变数据库连接 表结构如下:-- Create tablecreate table TEST_IMG( ID NUMBER, NAME VARCHAR2(20), IMG BLOB)tablespace FRDATA pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );判断是否插入数据库:select dbms_lob.getlength(img) from test_img是判断长度啊 Oracle的锁机制,最好能作出简要说明,谢谢 当ORACLE出现死锁时,有没有一个标准统一的提示呢? 求助truncate后,index怎么恢复 oracle分页的问题 Oracle中的游标怎么用?这里怎么报错了???? SQL查询问题 我想让oracle数据库每天23:00点干一件事情,怎么实现呢?? oracel 锁定小问题...加急 oracle9i数据库连接问题!! 请教个关于oracle alert trace日志的问题 高分求救:关于oracle和powerdesigner 关于exp,灵异现象
String insertsql;
TMemoryStream *ms = new TMemoryStream; //BC的流存储类
ms->Clear();
ms->LoadFromFile(MyFileName);//将文件读入该流式变量,MyFileName为读入文件的完整路径
insertsql=" insert into lin_tmp(dll_name,VERSION_NUMBER,DLL_FILE,FILE_DIR) ";
insertsql +=" values ('"+Edit3->Text+"','"+Edit1->Text+"',:p3,'"+MyFileName+"') " ; //数据插入SQL
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add(insertsql);
Query1->Params->Items[0]->LoadFromStream(ms,ftBlob);//申明MS这个流式变量以BLOB格
Query1->Prepare(); 式写入数据库
Query1->ExecSQL(); 大致思路如上,结合特定的语言改吧,希望能有帮助。
import java.io.*;
import java.sql.*;
public class InsertBlob {
public static void main(String args[]) {String username;
String password;
String url;
String dropString;
String createString;username = "kr863";
password = "krsoft";// The URL that will connect to TECFA's MySQL server
// Syntax: jdbc:TYPEachineort/DB_NAME
url = "jdbc:oracle:thin:@172.16.0.4:1521:frerp";
// ---- configure END// INSTALL/load the Driver (Vendor specific Code)
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch(java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
}try {
Connection con;
Statement stmt;// Establish Connection to the database at URL with usename and password
con = DriverManager.getConnection(url, username, password);
System.out.println ("Ok, connection to the DB worked. Let's see if we can insert something:");// con.setAutoCommit(false);
//获取image的路径
String image = "F:\\linsr\\upload\\11.gif";
//转换成file格式
File file = new File(image);
//将文件的长度读出,并转换成Long型
long l1=file.length();
int l2=(int)l1;//以流的格式赋值
FileInputStream fis=null;
try{
fis = new FileInputStream(file);
} catch(FileNotFoundException e) {}
PreparedStatement ps = con.prepareStatement("insert into test_img values (?,?,?)");
ps.setInt(1,2);
ps.setString(2,file.getName());
ps.setBinaryStream(3,fis,l2);ps.executeUpdate();
ps.close();
try{
fis.close();
} catch(IOException e) {}System.out.println ("Image Items have been inserted, you can now run the QueryCoffees program");
// Close resources
// stmt.close();
con.close();
}
// print out decent erreur messages
catch(SQLException ex) {
System.err.println("==> SQLException: ");
while (ex != null) {
System.out.println("Message: " + ex.getMessage ());
System.out.println("SQLState: " + ex.getSQLState ());
System.out.println("ErrorCode: " + ex.getErrorCode ());
ex = ex.getNextException();
System.out.println("");
}
}
}
}自己建一个表TEST_IMG
相应地改变数据库连接
-- Create table
create table TEST_IMG
(
ID NUMBER,
NAME VARCHAR2(20),
IMG BLOB
)
tablespace FRDATA
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
判断是否插入数据库:
select dbms_lob.getlength(img) from test_img
是判断长度啊