怎么把一个文件以二进制流的形式写入数据库的一个字段并同样的方法还原成一个文件啊

伟大的番茄炒鸡蛋 2003-08-19 01:59:24
怎么把一个文件以二进制流的形式写入数据库的一个字段并同样的方法还原成一个文件啊
...全文
200 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
搞定了,谢谢二位,我还有个新的问题,是接着这个的,这个帖子结分了!二位去看我的新帖子啊
  • 打赏
  • 举报
回复

Ryan76(秋南)

真的好感谢你啊,但是我是在是太菜了,学java才一周,并且我用的是SQLSERVER2000数据库,不是Oracle ,所以我照抄的时候,抄到:
fout = blob.getBinaryOutputStream(); ------》这里没有getBinaryOutputSt
ream();我换成了setBinaryStream( 0)行么?
File f = new File(args[1]);
fin = new FileInputStream(f);
byte[] buffer = new byte
[blob.getBufferSize()];------》这里没有getBufferSize方法,用length()也不行 我该在那么办啊?

javahui(阶级斗争要年年讲,月月讲,天天讲。)大大

你的方法我正在试,好像是什么
java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]第 1 行: '@P1' 附近有语法错误。
我正在调试

javahui 2003-08-19
  • 打赏
  • 举报
回复
public static void FileToDB(String filename,String table,String field,Connection con) throws Exception
{
if(filename==null||table==null||field==null) throw new Exception("错误:参数值不能为空。");

File file=new File(filename);
if(!file.exists()||!file.isFile()) throw new Exception("文件不存在!");

if(con==null) throw new Exception("错误:数据库连接无效。");

PreparedStatement ps=null;
try
{
ps=con.prepareStatement("insert into "+table+"("+field+") values(?)");
System.out.println("start write:");

ps.setBinaryStream(1,new FileInputStream(file),(int)file.length());
ps.execute();
System.out.println("end write:");
}
catch (Exception e)
{ e.printStackTrace();
throw e;
}
finally
{
if(ps!=null) try {ps.close();} catch(Exception e) {}
}


}
Ryan76 2003-08-19
  • 打赏
  • 举报
回复
看不清楚的话我mail给你
guoyf@sinosoft.com.cn
Ryan76 2003-08-19
  • 打赏
  • 举报
回复

文件写入数据库

import java.util.*;
import java.sql.*;
import java.io.*;
import java.text.*;
import oracle.sql.*;
import oracle.jdbc.driver.*;



public class write {

public static void main(String[] args) throws SQLException,IOException
{
PreparedStatement stmt = null;
ResultSet rs = null;
InputStream fin = null;
OutputStream fout = null;
Connection conn=null;
try{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
conn =DriverManager.getConnection ("jdbc:oracle:thin:@gyf:1521:orcl",
"test", "test");
conn.setAutoCommit(false);



stmt=conn.prepareStatement("insert into tmanuscript (glidenumber,filename,word) values (?,?,EMPTY_BLOB() ) ");
stmt.setString(1,args[0]);
System.out.println(args[1]);
stmt.setString(2,args[1]);
stmt.execute() ;
stmt.clearParameters() ;
String mysql="select word from tmanuscript where glidenumber='"+args[0]+"' for update ";
stmt=conn.prepareStatement(mysql );
//stmt.setString(1,args[0]);
rs=stmt.executeQuery() ;
if(rs.next()) {
BLOB blob = ((OracleResultSet)rs).getBLOB("word");
fout = blob.getBinaryOutputStream();
File f = new File(args[1]);
fin = new FileInputStream(f);
byte[] buffer = new byte[blob.getBufferSize()];
int bytesRead = 0;
while((bytesRead = fin.read(buffer)) != -1)
{
fout.write(buffer, 0, bytesRead);
System.out.println(bytesRead);
}

blob = null;
f = null;
buffer = null;
fin.close();
fout.close();
}


}
catch(SQLException ex)
{
ex.printStackTrace();

}
catch(FileNotFoundException ef) {
ef.printStackTrace();

}
catch(Exception e) {
e.printStackTrace();

}

finally {
try {

conn.commit();
stmt.close();
conn.close();
fin = null;
fout = null;
rs = null;
conn = null;
stmt = null;
}
catch(SQLException e) {
e.printStackTrace();
}
}


}

}

从数据库读出



import java.util.*;
import java.sql.*;
import java.io.*;
import java.text.*;
import oracle.sql.*;
import oracle.jdbc.driver.*;

public class read {

public static void main(String[] args) throws SQLException,IOException
{
Connection conn = null;
PreparedStatement stmt = null;
InputStream in = null;
OutputStream out = null;
BLOB blob = null;
ResultSet rs = null;
try {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
conn =DriverManager.getConnection ("jdbc:oracle:thin:@gyf:1521:orcl",
"test", "test");
conn.setAutoCommit(true);
String mysql="Select word FROM tmanuscript WHERE glidenumber='"+args[0]+"' for update";
System.out.println(mysql);

stmt = conn.prepareStatement(mysql);
//stmt.setString(1,"67");
rs = stmt.executeQuery();
if(rs.next()) {
blob = ((OracleResultSet)rs).getBLOB("word");

in = blob.getBinaryStream();
out = new FileOutputStream(args[0]+"o.zip");
int bufferSize = blob.getBufferSize();
byte[] buffer = new byte[bufferSize];
int bytesRead = 0;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
System.out.println(bytesRead);
}
stmt.clearParameters();
buffer = null;
in.close();
out.close();
}
}
catch(SQLException ex) {
ex.printStackTrace();

}
catch(Exception e) {
e.printStackTrace();

}

finally {
try {

conn.commit();
stmt.close();
conn.close();
in = null;
blob = null;
rs = null;
out = null;
conn = null;
stmt = null;
}
catch(SQLException e) {

}
}

}
}
swithgirl 2003-08-19
  • 打赏
  • 举报
回复
用Blob类型,用STREAM的方式进行读写。
  • 打赏
  • 举报
回复
是这个样子的,由于文件可能很大,所以不能用变量来装它,不然很占内存的,打算是用流的方式把文件以二进制的形式写入数据库的一个字段。用的时候再把它读回来,写成文件
  • 打赏
  • 举报
回复
能详细说点么?
knight_qmh 2003-08-19
  • 打赏
  • 举报
回复
用Blob类型
  • 打赏
  • 举报
回复
自己顶一下,高手帮忙啊

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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