⑴ java中 如何将存放在数据库中的pdf、doc、jpg等文件读出来(二进制形式存放在数据)
在数据库中存放这些个二进制文件的字段是BLOB,oracle和MysqL里面都是
java中读取 BLOB数据:
首先做查询,拿到查询结果ResultSet rs = XXXX (和普通数据查询一样)
然后:Blob blob = rs.getBlob("字段名"); 拿到你的Blob ,
得到文件的二进制流:InputStream binaryStream= blob.getBinaryStream();,
你的文件数据就在这个流当中,你想怎么用就怎么取,比如,读出来存到一个byte[]中,以便序列化传输,读出来构造成一个File直接存放到本地等等。
举个例子吧:从这个binaryStream中读取数据到byte[]的方法,
////////---------------------
/**
* 从binaryStream中读取数据到byte[]的方法
* @param in 即binaryStream
* @return
* @throws Exception
*/
public static byte[] readStreamToByteArray(InputStream in) throws Exception{
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while((len = in.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
outputStream.close();
in.close();
return outputStream.toByteArray();
}
//
⑵ jsp页面中如何将数据库中的blob字段转为String显示在页面上(java)
jsp先从数据库获取blob字段的值,然后通过流的方式读取,转换成string才可以展示的。
参考代码如下:
从数据库中读取Blob类型数据后,要转换成String类型,即转换成InputStream,再从InputStream转成byte[],再到String即可。如下:
//把数据库中blob类型转换成String类型
public String convertBlobToString(Blob blob){
String result = "";
try {
ByteArrayInputStream msgContent =(ByteArrayInputStream) blob.getBinaryStream();
byte[] byte_data = new byte[msgContent.available()];
msgContent.read(byte_data, 0,byte_data.length);
result = new String(byte_data);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
⑶ java中向oracle数据库blob字段中插入byte[]相关问题, 高人来.
你把一下的代码加入到一个类里就可以了,我已经测试过了,由于字数的限制不能把完整的类发上来。
String PSQL = "insert into TESTBLOB(NUMCONTENTID,BLOBCONTENT) " + "values(?,EMPTY_BLOB())";
String SSQL = "select BLOBCONTENT from TESTBLOB where NUMCONTENTID = ? for update";
String USQL = "update TESTBLOB set BLOBCONTENT = ? where NUMCONTENTID = ?";
public WriteBLOB() throws Exception {
Connection conn = null;
try {
conn = getConnection();
conn.setAutoCommit(false);
ByteBuffer bb = ByteBuffer.allocate(10836);
bb.position(0);
bb.putInt(1);
//调用 insertBLOB 方法 的contentid 应该使用序列这里为了简单就直接写死了
//下面的插入方式应该是你想要的方法 在数据库中会看到 0000 0001 0000 0000 0000....
//但是你这里好像没有真正的是用 ByteBuffer
byte [] b1 = bb.array();
insertBLOB(conn, 1, b1);
//下面是使用 ByteBuffer 后的插入 在数据库中会看到 0000 0001
//不知道你想要什么样子的,你自己选择不吧
bb.flip();
byte [] b2 = new byte [bb.remaining()];
bb.get(b2);
insertBLOB(conn, 2, b2);
} catch (Exception ex) {
ex.printStackTrace();
conn.rollback();
} finally {
if (conn != null)
conn.close();
}
}
public void insertBLOB(Connection conn, int contentid, byte[] content)
throws Exception {
PreparedStatement pstmt = null;
PreparedStatement pstmt2 = null;
int id = contentid;
try {
pstmt = conn.prepareStatement(PSQL);
pstmt2 = conn.prepareStatement(USQL);
pstmt.setInt(1, id);
try {
pstmt.executeUpdate();//在数据库中插入空对象
} catch (SQLException ex) {
ex.printStackTrace();
}
pstmt = conn.prepareStatement(SSQL);
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();//查询新插入的记录
oracle.sql.BLOB pc = null;
while (rs.next()) {
pc = (oracle.sql.BLOB) rs.getBlob(1);
}
byte[] data = content;
pc.putBytes(1, data);
pstmt2.setBlob(1, pc);
pstmt2.setInt(2, id);
pstmt2.executeUpdate();
} finally {
try {
pstmt.close();
pstmt2.close();
} catch (Exception EE) {
}
}
return;
}
⑷ java 中 blob转字符串
//字符串转blob
String str="哈哈哈哈哈哈";
java.sql.Blob bl=new SerialBlob(str.getBytes());
//blob转字符串
BufferedReader bf=new BufferedReader(new InputStreamReader(bl.getBinaryStream()));
String temp="";
StringBuffer sb=new StringBuffer();
while((temp=bf.readLine())!=null)
{
sb.append(temp);
}
System.out.println(sb.toString());
⑸ 数据库里存储的图片字段定义类型为blob,java里对应的类型为byte[],怎么将图片显示到jsp页面
这个试下吧.
....
<body>
<%
//获取图片对象(根据主键)的sql语句
String showImage = " select * "+
" from 存放图片的表 "+
" where id='1' " ;
BufferedInputStream inputImage = null;
try{
//conn为一个Connection对象
Statement st = conn.createStatement();
//获取结果集
ResultSet rs=st.executeQuery(showImage);
//输出文件名
String filename="";
if(rs.next()) {
Blob blob = (Blob)rs.getBlob("BINARYFILE");
filename=rs.getString("FILENAME");
//读取图片字节到数据流中
inputImage = new BufferedInputStream(blob.getBinaryStream());
}
BufferedImage image = null;
image=ImageIO.read(inputImage);
//获取响应的输出流
ServletOutputStream so = response.getOutputStream();
//创建图片到页面
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(so);
encoder.encode(image);
inputImage.close();
}
%>
</body>
<%
catch(Exception e){
}
finally{
closeConn(conn);
}
%>