java利用odbc把excel数据导入oracle,整型字符型都正常,excel含图片的字段怎么处理? java读excel图片字段代码, blob b = rs.getBlob(1);这样直接读得到的 b为 null,java 怎么才能读取到 并且存储到oracle对应的字段中。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 从数据库中读出BLOB数据没有上述由于连接池的不同带来的差异,程序流程同插入BLOB字段,但是读BLOB就不用那么复杂了,只需要J2SE的标准类java.sql.Blob就可以取得输出流。 objVO.setContent(rs.getBlob("CONTENT")); 我是要从excel文件中读取 图片 字段,并且把这个图片存到oracle数据库中,不是从oracle数据库中读出来显示, 很早以前用的:给你参考下对Lob的处理!import static common.JDBCConnectionFactory.close;import static common.JDBCConnectionFactory.getConnection;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.Reader;import java.io.Writer;import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;/** * @author jiangwh */public class LobTest { //存放图片文件以及文本 /** *1.因为需要使用流操作,因此需要在保存数据之前先向数据库中存放 * 空的blob以及clob记录 *2.oracle中empty_bolb()和empty_clob()方法可以实现 *3.查询获得blob以及clob的操作流进行写入操作 * */ public static void save(){ Connection conn=getConnection(); Statement stmt=null; ResultSet rs=null; try{ conn.setAutoCommit(false);//发生异常可以回滚 //步骤1:插入一条记录,blob就阿clob所对应的列为空值 //插入空值的目的是获得输出流。 stmt=conn.createStatement(); String sql1= "insert into lob_tbl values(1,'tom',empty_blob(),empty_clob())"; stmt.execute(sql1); //步骤2:将插入的记录读入到结果集 String sql2= "select * from lob_tbl where id=1"; rs=stmt.executeQuery(sql2); oracle.sql.BLOB blob=null; oracle.sql.CLOB clob=null; //步骤3:通过get方法获得对应的blob,clob对象,为实现获得对应的 //输出流,需要将其进行oracle.sql.BLOB/CLOB的强制类型转换 while(rs.next()){ blob=(oracle.sql.BLOB)rs.getBlob(3); clob=(oracle.sql.CLOB)rs.getClob(4); } //步骤4:进行流操作实现具体blob以及clob内容的存储 //对blob对象存储 OutputStream osBlob=blob.getBinaryOutputStream(); FileInputStream fisBlob =new FileInputStream ("/home/briup/JD0802集体照.jpg"); BufferedInputStream bisBlob=new BufferedInputStream(fisBlob); byte[] bufferBlob=new byte[1024]; int lengthBlob=0; while((lengthBlob=bisBlob.read(bufferBlob))!=-1){ osBlob.write(bufferBlob,0,lengthBlob); } osBlob.flush(); osBlob.close(); bisBlob.close(); fisBlob.close(); //对clob的存储 Writer writerClob=clob.getCharacterOutputStream(); writerClob.write("I an tom"); writerClob.flush(); writerClob.close(); conn.commit(); }catch(Exception e){ try{ conn.rollback(); }catch(Exception e1){ } }finally{ close(conn,stmt,rs); } } //生成图片文件以及文本文件 public static void load(){ Connection conn=getConnection(); Statement stmt=null; ResultSet rs=null; try{ String sql="select * from lob_tbl where id=1"; stmt=conn.createStatement(); rs=stmt.executeQuery(sql); oracle.sql.BLOB blob=null; oracle.sql.CLOB clob=null; while(rs.next()){ blob=(oracle.sql.BLOB)rs.getBlob(3); clob=(oracle.sql.CLOB)rs.getClob(4); } InputStream isBlob=blob.getBinaryStream(); BufferedInputStream bisBlob=new BufferedInputStream(isBlob); FileOutputStream fosBlob=new FileOutputStream ("/home/briup/Desktop/blob.gif"); BufferedOutputStream bosBlob=new BufferedOutputStream(fosBlob); byte[] bufferBlob=new byte[2048]; int lengthBlob=0; while((lengthBlob=bisBlob.read(bufferBlob))!=-1){ bosBlob.write(bufferBlob,0,lengthBlob); } bosBlob.flush(); bosBlob.close(); fosBlob.close(); bisBlob.close(); isBlob.close(); //对clob的读出操作 Reader readerClob=clob.getCharacterStream(); FileOutputStream fosClob=new FileOutputStream ("/home/briup/Desktop/clob.txt"); BufferedOutputStream bosClob=new BufferedOutputStream(fosClob); OutputStreamWriter oswClob=new OutputStreamWriter(bosClob); char ch[]=new char[30]; int lengthClob=0; while((lengthClob=readerClob.read(ch))!=-1){ oswClob.write(ch,0,lengthClob); } oswClob.flush(); oswClob.close(); bosClob.close(); fosClob.close(); readerClob.close(); conn.commit(); }catch(Exception e){ e.printStackTrace(); }finally{ close(conn,stmt,rs); } }} oracle 也可以跨库建同义词 有jdbc连接数据库 执行查询语句报错:表不存在 [Oracle/基础和管理]请问OCIStmtPrepare中的语句长度要不要加上“\0”呢? 关于分页存储过程的问题!!! 请高手帮忙纠错 怎样用JDBC返回查询中第十万条到第十万两千条的记录? 请教怎么写这个命令 如何跨越防火墙访问Oracle数据库? jdbc与ORACLE怎样连接?用tomcat,classes12.jar怎么设置呀!! odbc 连接Oracle 报错State:S0022 什么叫神经网络拟合,是一种算法吗? 这个sql语句如何写(oracle数据库)
objVO.setContent(rs.getBlob("CONTENT"));
给你参考下对Lob的处理!
import static common.JDBCConnectionFactory.close;
import static common.JDBCConnectionFactory.getConnection;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
/**
* @author jiangwh
*/
public class LobTest { //存放图片文件以及文本
/**
*1.因为需要使用流操作,因此需要在保存数据之前先向数据库中存放
* 空的blob以及clob记录
*2.oracle中empty_bolb()和empty_clob()方法可以实现
*3.查询获得blob以及clob的操作流进行写入操作
* */
public static void save(){
Connection conn=getConnection();
Statement stmt=null;
ResultSet rs=null;
try{
conn.setAutoCommit(false);//发生异常可以回滚
//步骤1:插入一条记录,blob就阿clob所对应的列为空值
//插入空值的目的是获得输出流。
stmt=conn.createStatement();
String sql1=
"insert into lob_tbl values(1,'tom',empty_blob(),empty_clob())";
stmt.execute(sql1);
//步骤2:将插入的记录读入到结果集
String sql2=
"select * from lob_tbl where id=1";
rs=stmt.executeQuery(sql2);
oracle.sql.BLOB blob=null;
oracle.sql.CLOB clob=null;
//步骤3:通过get方法获得对应的blob,clob对象,为实现获得对应的
//输出流,需要将其进行oracle.sql.BLOB/CLOB的强制类型转换
while(rs.next()){
blob=(oracle.sql.BLOB)rs.getBlob(3);
clob=(oracle.sql.CLOB)rs.getClob(4);
}
//步骤4:进行流操作实现具体blob以及clob内容的存储
//对blob对象存储
OutputStream osBlob=blob.getBinaryOutputStream();
FileInputStream fisBlob =new FileInputStream
("/home/briup/JD0802集体照.jpg");
BufferedInputStream bisBlob=new BufferedInputStream(fisBlob);
byte[] bufferBlob=new byte[1024];
int lengthBlob=0;
while((lengthBlob=bisBlob.read(bufferBlob))!=-1){
osBlob.write(bufferBlob,0,lengthBlob);
}
osBlob.flush();
osBlob.close();
bisBlob.close();
fisBlob.close();
//对clob的存储
Writer writerClob=clob.getCharacterOutputStream();
writerClob.write("I an tom");
writerClob.flush();
writerClob.close();
conn.commit();
}catch(Exception e){
try{
conn.rollback();
}catch(Exception e1){
}
}finally{
close(conn,stmt,rs);
}
}
//生成图片文件以及文本文件
public static void load(){
Connection conn=getConnection();
Statement stmt=null;
ResultSet rs=null;
try{
String sql="select * from lob_tbl where id=1";
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
oracle.sql.BLOB blob=null;
oracle.sql.CLOB clob=null;
while(rs.next()){
blob=(oracle.sql.BLOB)rs.getBlob(3);
clob=(oracle.sql.CLOB)rs.getClob(4);
}
InputStream isBlob=blob.getBinaryStream();
BufferedInputStream bisBlob=new BufferedInputStream(isBlob);
FileOutputStream fosBlob=new FileOutputStream
("/home/briup/Desktop/blob.gif");
BufferedOutputStream bosBlob=new BufferedOutputStream(fosBlob);
byte[] bufferBlob=new byte[2048];
int lengthBlob=0;
while((lengthBlob=bisBlob.read(bufferBlob))!=-1){
bosBlob.write(bufferBlob,0,lengthBlob);
}
bosBlob.flush();
bosBlob.close();
fosBlob.close();
bisBlob.close();
isBlob.close();
//对clob的读出操作
Reader readerClob=clob.getCharacterStream();
FileOutputStream fosClob=new FileOutputStream
("/home/briup/Desktop/clob.txt");
BufferedOutputStream bosClob=new BufferedOutputStream(fosClob);
OutputStreamWriter oswClob=new OutputStreamWriter(bosClob);
char ch[]=new char[30];
int lengthClob=0;
while((lengthClob=readerClob.read(ch))!=-1){
oswClob.write(ch,0,lengthClob);
}
oswClob.flush();
oswClob.close();
bosClob.close();
fosClob.close();
readerClob.close();
conn.commit();
}catch(Exception e){
e.printStackTrace();
}finally{
close(conn,stmt,rs);
}
}}