这篇文章主要讲解了如何使用jdbc读取关系型数据库(如oracle,mysql,sqlserver等)中存放文件的大字段,并还原成文件。如有不妥之处,请指正。
//以oracle为例
public void getFileFormDB(){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
String url = "jdbc:oracle:thin:@localhost:1521:oracle01";
String user = "test";
String psw = "test":
try{
//step1 从数据库中查询出文件大字段
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url,user,psw);
ps = conn.prepareStatement("select word from file");
rs = ps.executeQuery();//获取到文件大字段集合
InputStream is = null;
File file = null;
FileOutPutStream fos = null;
while(rs.next()){
try{
is = rs.getBinaryStream("word");//获取到文件大字段
file = new File("D:\\test\\test.doc");//创建新文件
fos = new FileOutPutStream(file,true);
byte[] bytes = new byte[1024];
while(is.read(bytes) != -1){//没有读完
fos.write(bytes);//将字段写入新文件
}
}catch(Exception e1){
e1.printStackTrace();
}
}
if(fos != null){
fos.close();
}
if(is != null){
is.close();
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(rs != null){
rs.close();
}
if(ps != null){
ps.close();
}
if(conn != null){
conn.close();
}
}
}
怎么将文件转换成字节存储到数据库
File file = new File("d:test.doc");
FileInputStream fis = new FileInputStream(file);
ps.setBinaryStream(1,fis,(int)file.length());