需java读取oracle中blob字段的图片信息,并能保存或显示该图片。(非jsp程序)

csdn144 2003-09-11 11:52:58
如题,谢谢了。
...全文
504 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
pqds 2003-09-11
  • 打赏
  • 举报
回复
上面的错了没有修改,从来
//塞进去
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(“您老人家要存的东西”);

ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
String sql =“您老人家的sql 语句,?”//?代表你的字段内容
PreparedStatement pstate = datesource.getcon().prepareStatement(sql);
pstate.setBinaryStream(1, bis, bis.available());
pstate.execute();
bis.available();
pstate.close();
呵呵!塞进去!恭喜!
pqds 2003-09-11
  • 打赏
  • 举报
回复
//塞进去
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);

//调用方法重新计算组件的大小、两个参数迭代器,一个用来计算bounds,一个用来设置大小
ResizeDiy resizediy = new ResizeDiy(theApp.getModel().getIterator(),
theApp.getModel().getIterator());
resizediy.resetModel();
oos.writeObject(theApp.getModel());

ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
//非开关sql
String sql =
"insert into Equp(id,Equpname,Equp_f,Equp_type) values ("
+ "off_Equp_id.nextval,'" + input + "',?,'" + groupname + "')";
PreparedStatement pstate = datesource.getcon().prepareStatement(sql);
pstate.setBinaryStream(1, bis, bis.available());
pstate.execute();
bis.available();
pstate.close();
pqds 2003-09-11
  • 打赏
  • 举报
回复
//读取
rs = 你的sql的结果集
while (rs.next()) {
Blob blob = rs.getBlob("您老人家存的字段");
ByteArrayInputStream bais = new ByteArrayInputStream(blob.getBytes(1,
(int) blob.length()));
ObjectInputStream obis = new ObjectInputStream(bais);
(什么类型) ele = (类型) obis.readObject();
//你存的是什么类型,取出来牵制转换下
}
pqds 2003-09-11
  • 打赏
  • 举报
回复
好!哪您下次放贴的时候通知一声!
我千里而来!
csdn144 2003-09-11
  • 打赏
  • 举报
回复
好吧。我的分很多,先给你100分,不够下次你还来回答我的问题,OK。
pqds 2003-09-11
  • 打赏
  • 举报
回复
这就插进去了!,先给分!很着急!
pqds 2003-09-11
  • 打赏
  • 举报
回复
这是偶刚给你试过的,说了几遍了不需要自己序列化的纯纯图片!就这样!
你再说错,俺就叫人打你!
试!


try {
bka b = new bka();//您的数据库连接
File file=new File("c:\\ball.gif");
java.io.FileInputStream filein=new FileInputStream(file);
PreparedStatement st1=b.getcon().prepareStatement(
"insert into Equp(id,Equp_f) values ("
+ "off_Equp_id.nextval,?)");
st1.setBinaryStream(1,filein,2000);
st1.executeUpdate();
filein.close();

}
catch(Exception e) {
e.printStackTrace();
}
csdn144 2003-09-11
  • 打赏
  • 举报
回复
java.sql.SQLException: Io 异常: Connection reset
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:323)
at oracle.jdbc.driver.OracleStatement.close(OracleStatement.java:604)
at oracle.jdbc.driver.OraclePreparedStatement.privateClose(OraclePrepare
dStatement.java:290)
at oracle.jdbc.driver.OraclePreparedStatement.close(OraclePreparedStatem
ent.java:235)
at dbImage.insertImage(dbImage.java:172)
at dbImage.main(dbImage.java:189)
Press any key to continue...
pqds 2003-09-11
  • 打赏
  • 举报
回复
如果纯纯的图片,不需要自己序列化的
File file=new File("f:\\object.jpg");
out.println(file.length());
java.io.FileInputStream filein=new FileInputStream(file);
PreparedStatement st1=conn.prepareStatement("update table set ob=?");
st1.setBinaryStream(1,fileint,2000);
st1.executeUpdate();
filein.close();
pqds 2003-09-11
  • 打赏
  • 举报
回复
费眼!错误提示是什么?
csdn144 2003-09-11
  • 打赏
  • 举报
回复
根据你的提议,做个了函数。可数据还是插不进去。费神您再帮我瞅瞅。分给定你了。

public boolean insertImage(String fileName)
{
int fileSize;
ByteArrayInputStream bis;
try
{
ImageIcon image = new ImageIcon(fileName);
log("生成imageicon");

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(image);
log("存入ObjectOutputStream");

bis = new ByteArrayInputStream(bos.toByteArray());
fileSize = bis.available();
log("存入ByteArrayInputStream, size: " + fileSize);


}
catch (Exception E)
{
log("读入文件流错误!");
return false;
}


String sql = "delete from TEST";
try
{
smt.executeUpdate(sql);
}
catch (SQLException E)
{
log("删除数据错误!");
}

sql = "insert into TEST(ID, NAME) values(?,?)";

try
{
pstmt = FCon.prepareStatement(sql);
pstmt.setInt(1, 100);

pstmt.setBinaryStream(2, bis, fileSize);
pstmt.executeUpdate();

pstmt.close();
log("数据流写入数据库成功!");
}
catch (SQLException E)
{
log("文件流写入数据库错误!");
E.printStackTrace();
return false;
}

return true;
}
pqds 2003-09-11
  • 打赏
  • 举报
回复
上面是针对些需要序列化的对象而言,如照片话,下:
File file=new File("f:\\object.jpg");
out.println(file.length());
java.io.FileInputStream filein=new FileInputStream(file);
PreparedStatement st1=conn.prepareStatement("update table set ob=?");
st1.setBinaryStream(1,fileint,2000);
st1.executeUpdate();
filein.close();
pqds 2003-09-11
  • 打赏
  • 举报
回复
说!你什么时候给分!
pqds 2003-09-11
  • 打赏
  • 举报
回复
csdn144 (令狐冲) :
有必要吗?没有必要,到底有没有必要,就讨论一下吗?这么兴奋干什么名?

pstate.close();你不搞!哼!哼哼!

呵呵!如果你的pstate过多的话,导致游标超出范围!例如你在一个while循环里搞,
那么搞的结果就是游标超出范围!呵呵!当然系统小的时候是看不出来的!是的!呵呵!是的!
别嫌我烦!
俺只是个女农民,俺容易吗俺!
你还放着好好的分不给人家,人家心里课着急了!你只要把分给人家让人家干什么都中----------------------------这是谁的分呀这是偶的分!
csdn144 2003-09-11
  • 打赏
  • 举报
回复
pstate.close();
必须要吗?

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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