首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

图片以二进制保留到Oracle,取出并显示到页面示例

2012-07-15 
图片以二进制保存到Oracle,取出并显示到页面示例用过数据库的人都知道,像文件、图片、视频等这些大对象可以

图片以二进制保存到Oracle,取出并显示到页面示例
  用过数据库的人都知道,像文件、图片、视频等这些大对象可以用两种方式来存取:1.将这些对象放到服务器的某个文件中,将它们的路径保存到数据库;2.直接将这些文件对象以二进制形式保存到数据库中,用时再通过流对象读取出来。
  可能大多数人采用第一种方式,这里我主要试下第二种方式保存数据,原理主要是通过Oracle里面的BLOB数据类型来实现。
  这个示例主要是将页面的学生信息录入数据库,然后点击查看按钮马上可以查看当前保存用户的资料,实现截图如下:
 








  新建一张学生表,字段如下:



  Student类
 

/** * 学生类 *  */public class Student {private int id;private String sex;private String username;private String picName;public String getPicName() {return picName;}public void setPicName(String picName) {this.picName = picName;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String toString() {return "id: " + id + " username: " + username + " sex: " + sex;}}  

 
  Oracle数据库连接
 
/** * 与Oracle数据库连接 *  */public class OracleConnection {private static String ojdbcURL = "jdbc:oracle:thin:@localhost:1521:xe";private static String ojdbcDriver = "oracle.jdbc.driver.OracleDriver";private static String userName = "czc";private static String password = "netjava";private static Connection connec;public static Connection getConnec() {if (connec != null) {return connec;}try {Class.forName(ojdbcDriver);connec = DriverManager.getConnection(ojdbcURL, userName,     password);System.out.println("与oracle数据库连接成功...");} catch (Exception e) {System.out.println("与oracle数据库连接失败...");e.printStackTrace();}return connec;}}  


  Student操作类
 
/** * 数据操作 */public class StudentDAO {/** * 将学生信息保存到数据库 *  * @param stu:学生对象 * @return :是否成功 */public boolean savaStuMsg(Student stu) {try {// 取得数据库连接对象Connection connec = OracleConnection.getConnec();// 写插入SQLString sql = "insert into student(name,sex,picture) values(?,?,?)";// 得到预编译对象PreparedStatement pstm = connec.prepareStatement(sql);pstm.setString(1, stu.getUsername());pstm.setString(2, stu.getSex());// 创建一个文件输入流对象FileInputStream fins = new FileInputStream(stu.getPicName());// 将图片以二制数据保存到数据库pstm.setBinaryStream(3, fins, fins.available());pstm.addBatch();pstm.executeBatch();System.out.println("学生信息保存成功!");return true;} catch (Exception e) {e.printStackTrace();}return false;}/** * 根据学生名字查询学生信息 *  * @param username:姓名 * @return */public Student getStuMsg(String username) {try {Connection connec = OracleConnection.getConnec();// 注:where后varchar字段必须加''String sql = "select id,sex from student where name='" + username+ "'";Statement stmt = connec.createStatement();ResultSet rset = stmt.executeQuery(sql);Student stu = new Student();if (rset.next()) {stu.setId(rset.getInt("id"));stu.setSex(rset.getString("sex"));stu.setUsername(username);}return stu;} catch (Exception e) {e.printStackTrace();}return null;}/** * 查找要显示图片 *  * @param id:图片id * @return:缓冲输入流 */public BufferedInputStream getPicMsg(int id) {// 定义一个BLOB对象,这是一种数据对象,关键是这个BLOB对象的作用BLOB blob = null;try {Connection connec = OracleConnection.getConnec();String sql = "select picture from student where id=" + id;Statement stmt = connec.createStatement();ResultSet rset = stmt.executeQuery(sql);if (rset.next()) {// 得到图片BLOB对象blob = (BLOB) rset.getBlob("picture");}// 得到图片输入流InputStream in = blob.getBinaryStream();// 包装成缓冲输入流BufferedInputStream bfin = new BufferedInputStream(in);return bfin;} catch (Exception e) {e.printStackTrace();}return null;}}  


  SaveServlet:处理页面提交信息的Servlet类
 
/** * 将提交上来的数据保存到数据库 *   */public class SaveServlet extends HttpServlet {public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");String username = request.getParameter("username");String sex = request.getParameter("sex");String picture = request.getParameter("picture");System.out.println("username:" + username + " sex:" + sex + " picture:"+ picture);// 创建一个学生对象Student stu = new Student();stu.setUsername(username);stu.setSex(sex);stu.setPicName(picture);// 将学生信息保存到数据库StudentDAO sdao = new StudentDAO();boolean isSuccess = sdao.savaStuMsg(stu);if (isSuccess) {//将学生的名字放到request中request.setAttribute("username", username);request.getRequestDispatcher("/success.jsp").forward(request, response);}else{request.getRequestDispatcher("/error.jsp").forward(request, response);}}}  


SelectServlet:将保存的学生对象信息查询出来的Servlet
 
/** * 将保存的学生查找出来 *  */public class SelectServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");String username = request.getParameter("username");System.out.println("要查询的学生名字是: " + username);StudentDAO sdao = new StudentDAO();// 根据学生名字得到学生对象Student stu = sdao.getStuMsg(username);if (stu != null) {// 将对象放到session对象中request.getSession().setAttribute("stu", stu);request.getRequestDispatcher("/display.jsp").forward(request, response);}}}  


核心代码--DisplayServlet:显示图片的Servlet
 
/** * 处理显示图片的servlet:将图片显示到页面 *  */public class DisplayServlet extends HttpServlet {public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("image/jpg");// 从session对象中得到学生对象Student stu = (Student) request.getSession().getAttribute("stu");// 得到图片流对象StudentDAO sdao = new StudentDAO();BufferedInputStream bfin = sdao.getPicMsg(stu.getId());// 将ServletOutputStream包装成BufferedOutputStreamBufferedOutputStream bout = new BufferedOutputStream(response.getOutputStream());int i = 0;while ((i = bfin.read()) != -1) {bout.write(i);}bfin.close();bout.flush();bout.close();}}  

 
  display.jsp:显示学生信息的JSP页面
 
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ page import="cn.netjava.pojo.Student"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>学生信息</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><%  //得到学生对象  Student stu =(Student)request.getSession().getAttribute("stu");   %><div style="text-align:center"><table><caption>学生信息</caption><tr><td>姓名</td><td><%=stu.getUsername()%></td><!-- 核心代码:显示图片 --><td rowspan="2"><img src="DisplayServlet"></img></td></tr><tr><td>性别</td><td><%=stu.getSex()%></td></tr></table></div></body></html>  


  这个示例的代码已打包,如果有人感兴趣,或有人有更好的实现方法,欢迎大家一起讨论。

热点排行