当前位置: 技术问答>java相关
用jsp怎样实现将word文件内容存入数据库中的大对象字段中?
来源: 互联网 发布时间:2015-08-28
本文导语: 我的想法是首先把word文档中的内容转换成二进制码,再存入数据库的大对象字段中(BLOB)。读取的实后在再把二进制代码转换成字符,显示出来。这种方法在ASP中是可以实现的。不知道相类似的方法在JSP中是否存在...
我的想法是首先把word文档中的内容转换成二进制码,再存入数据库的大对象字段中(BLOB)。读取的实后在再把二进制代码转换成字符,显示出来。这种方法在ASP中是可以实现的。不知道相类似的方法在JSP中是否存在。那为仁兄知道的话,能否指点指点,小弟感激不尽!!!
|
参考下面的bean:
package demo;
import java.sql.*;
import java.io.*;
import oracle.sql.BLOB;
import oracle.jdbc.*;
//此程序的作用:向test(字段为name varchar2;b blob)库,插入一个文件(read.txt),再将其从库中读出,写到ok.txt中
public class orablob
{
public void orablob()
{}
public static void insertblob()
{
try
{
//首先是将文件输入到数据库。
Class.forName("oracle.jdbc.driver.OracleDriver");//注册数据库引擎。
Connection conn= DriverManager.getConnection("dburl=jdbc:oracle:thin:@yf:1521:kjb", "kjb", "KJBMostJ2EEOraDB");//建立连接串
conn.setAutoCommit(false);//关闭自动提交,以提高性能。
Statement stmt=conn.createStatement();//建立会话
try
{
stmt.execute ("drop table test");
}
catch (SQLException e)
{
// An exception could be raised here if the table did not exist already.
}
stmt.execute ("create table test (fname varchar2(600),bx blob)");
File file=new File("D:\test\Icon.jpg");
InputStream is=new FileInputStream(file);//创建输入流,将外部文件输入到InputStream 中。
System.out.print(file.length());
byte[] blobByte=new byte[is.available()];
is.read(blobByte);
is.close();
PreparedStatement pstmt=conn.prepareStatement("INSERT INTO TEST VALUES (?,?)");
pstmt.setString(1,file.getName());
pstmt.setBinaryStream(2,(new ByteArrayInputStream(blobByte)), blobByte.length);
pstmt.executeUpdate();//将文件流插入到数据库中。
pstmt.close();
//以下是从库中读取文件。
ResultSet rset=stmt.executeQuery("SELECT * from test");
while (rset.next())
{// Get LOB locators into Java wrapper classes.
BLOB blob=((OracleResultSet)rset).getBLOB(2);//获取文件字段。
// int chunk=blob.getChunkSize();
int chunk=blob.getChunkSize();
byte [] buffer=new byte[chunk];
System.out.println(chunk);
File binaryFile=new File("D:\test\Ora.java");
FileOutputStream fileoutstream=new FileOutputStream(binaryFile);//创建文件输出流。
InputStream instream=blob.getBinaryStream();//建立输入流,并将字段comment的值以流的形式,放入instream变量。
instream.read(buffer,0,chunk);//将文件流存入变量buffer,以buffer为中转
fileoutstream.write(buffer,0,chunk);//将buffer写入文件输出流。
System.out.println("write ok!");
instream.close();//关闭流
fileoutstream.close();
}
rset.close();
stmt.close();
conn.close();
System.out.print("ok");
}
catch(Exception ee)
{
System.out.println(ee.getMessage());
}
}
public static void main(String args[])
{
insertblob();
}
}
package demo;
import java.sql.*;
import java.io.*;
import oracle.sql.BLOB;
import oracle.jdbc.*;
//此程序的作用:向test(字段为name varchar2;b blob)库,插入一个文件(read.txt),再将其从库中读出,写到ok.txt中
public class orablob
{
public void orablob()
{}
public static void insertblob()
{
try
{
//首先是将文件输入到数据库。
Class.forName("oracle.jdbc.driver.OracleDriver");//注册数据库引擎。
Connection conn= DriverManager.getConnection("dburl=jdbc:oracle:thin:@yf:1521:kjb", "kjb", "KJBMostJ2EEOraDB");//建立连接串
conn.setAutoCommit(false);//关闭自动提交,以提高性能。
Statement stmt=conn.createStatement();//建立会话
try
{
stmt.execute ("drop table test");
}
catch (SQLException e)
{
// An exception could be raised here if the table did not exist already.
}
stmt.execute ("create table test (fname varchar2(600),bx blob)");
File file=new File("D:\test\Icon.jpg");
InputStream is=new FileInputStream(file);//创建输入流,将外部文件输入到InputStream 中。
System.out.print(file.length());
byte[] blobByte=new byte[is.available()];
is.read(blobByte);
is.close();
PreparedStatement pstmt=conn.prepareStatement("INSERT INTO TEST VALUES (?,?)");
pstmt.setString(1,file.getName());
pstmt.setBinaryStream(2,(new ByteArrayInputStream(blobByte)), blobByte.length);
pstmt.executeUpdate();//将文件流插入到数据库中。
pstmt.close();
//以下是从库中读取文件。
ResultSet rset=stmt.executeQuery("SELECT * from test");
while (rset.next())
{// Get LOB locators into Java wrapper classes.
BLOB blob=((OracleResultSet)rset).getBLOB(2);//获取文件字段。
// int chunk=blob.getChunkSize();
int chunk=blob.getChunkSize();
byte [] buffer=new byte[chunk];
System.out.println(chunk);
File binaryFile=new File("D:\test\Ora.java");
FileOutputStream fileoutstream=new FileOutputStream(binaryFile);//创建文件输出流。
InputStream instream=blob.getBinaryStream();//建立输入流,并将字段comment的值以流的形式,放入instream变量。
instream.read(buffer,0,chunk);//将文件流存入变量buffer,以buffer为中转
fileoutstream.write(buffer,0,chunk);//将buffer写入文件输出流。
System.out.println("write ok!");
instream.close();//关闭流
fileoutstream.close();
}
rset.close();
stmt.close();
conn.close();
System.out.print("ok");
}
catch(Exception ee)
{
System.out.println(ee.getMessage());
}
}
public static void main(String args[])
{
insertblob();
}
}