今天在项目中要向Oracle的LONG RAW形字段插入图片,以配合C/S的设计结构 项目中用Hibernate ORM,找了N久没有找到具体操作方法,终于花了2个多小时找到一个JDBC操作的例子,代码改造后为 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class JdbcImgDAO { //数据库连接方法 public static Connection getConnection(){ String url="jdbc:oracle:thin:@192.168.0.100:1521:testdb"; Connection conn = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn=DriverManager.getConnection(url,"user","pwd"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } //插入图片到案例库,id为主键,s为上传图片(路径+图片名) public static void updateImg(String id, String s){ Connection conn = getConnection(); String sql="update table t set t.img=? where id=?"; File filename=new File(s); //将文件的长度读出,并转换成Long型 long l1=filename.length(); int l2=(int)l1; try { //以流的格式赋值 FileInputStream fis=new FileInputStream(filename); PreparedStatement ps =conn.prepareStatement(sql); ps.setBinaryStream(1,fis,l2); //ps.setBinaryStream(1,fis,fis.available()); ps.setString(2,id); ps.executeUpdate(); ps.close(); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } } 显示图片页 img.jsp <%@ page contentType="text ml; charset=gbk"%> <%@ page import="java.io.*"%> <%@ page import="java.sql.*, javax.sql.*"%> <%@ page import="java.util.*"%> <% String id = request.getParameter("id"); String URL="jdbc:oracle:thin:@192.168.0.100:1521:testdb"; String user="user"; String password="pwd"; Connection con = DriverManager.getConnection(URL,user,password); InputStream in = null; ResultSet rs = null; OutputStream out = response.getOutputStream(); try{ Statement stmt = con.createStatement(); String sql = "select t.img from table t where id="+id; rs = stmt.executeQuery(sql); while(rs.next()) { in = rs.getBinaryStream("img"); int len = 0; byte[] byte = new byte[1024]; //response.setContentType("image/jpeg"); while ((len = in.read(byte)) != -1) { out.write(byte,0,len); } out.close(); in.close(); } }catch(Exception e){ e.printStackTrace(); }finally{ rs.close(); con.close(); } %> 显示信息页面 <img src="img.jsp">
开发者博客:www.developsearch.com
相关推荐
下面将详细介绍这两种数据类型以及如何在Oracle中使用它们存储和读取图片。 1. **CLOB数据类型**: `CLOB`数据类型用于存储大量的字符数据,最大可达到4GB。虽然主要用于存储文本,但在本例中,由于图片可以被转换...
该项目演示了一个 JavaFX 工具,该工具提取记录在 Oracle Long Raw 数据字段中的文件。 结构 模型:包含保存有关最终用户进行的连接和查询的信息的域类 控制器:这一层与视图(fxml)通信并与之绑定方法和属性 View...
Oracle数据库中,LongRaw和Blob是两种不同的数据类型,它们分别用于存储大对象(LOB)数据。LongRaw类型是Oracle的原始数据类型,用于存储二...如果你正在迁移旧系统,可能需要考虑将LongRaw字段逐步迁移到Blob字段。
Oracle数据库是一个流行的关系型数据库系统,它提供了LONG RAW和BLOB类型来存储非结构化的数据,如图片。 在Oracle中,LONG RAW类型用于存储原始二进制数据,而BLOB(Binary Large Object)用于存储可变长度的二...
System.out.println("图片插入失败!"); } ``` #### 三、使用Java从Oracle数据库读取图片 从Oracle数据库中读取图片的过程与保存过程类似,但主要涉及以下步骤: 1. **建立数据库连接**:与上文相同,使用`...
"AnySQL_net » Blog Archive » 如何将BLOB的内容转到LONG RAW中.html"这篇文章可能会探讨如何在Oracle中将Blob数据转换为LONG RAW类型,LONG RAW是Oracle另一种存储大对象的方式,但只适用于二进制数据。...
在IT领域,存储图像等非结构化数据在数据库中是一项常见的需求。本示例展示了如何使用JSP(Java...同时,对于Oracle数据库,`LONG RAW`类型在Oracle 12c及以后的版本中已被弃用,推荐使用BLOB类型来存储二进制大对象。