资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
前几天突然看到学校音乐站上的图片原来是存储在数据库上的,是二进制而不是使用路径保存的,在网上招了找发现大多介绍的都是 hph 方式,在这里做个总结,首先要存储二进制文件在数据库中要搞清楚下面几个内容:1 mysql 存储大容量的二进制文件的格式是 blob,其实除了图片还可以存别的2 要向数据库存储二进制的文件一定要把要存储的数据转换成二进制流废话就不多说了,大家看看代码很容易明白,先来看一个 app 程序,当然首先您要在数据库中先建立一个用于保存图片的表和相应的列,数据格式为 blobpackage com.lizhe;import java.io.*;import java.sql.*;public class PutImg public void putimg() try Class.forName(org.gjt.mm.mysql.Driver).newInstance();String url = jdbc:mysql:/localhost/img?user=root&password=root&useUnicode=true&characterEncoding=gbk;Connection conn = DriverManager.getConnection(url);Statement stmt = conn.createStatement();/stmt.execute(insert into imgt (id) values (5);stmt.close();PreparedStatement pstmt = null;String sql = ;File file = new File(c:blog.jpg);InputStream photoStream = new FileInputStream(file);/sql = UPDATE imgt SET img = ? ;sql = INSERT INTO imgtable (img) VALUES (?);pstmt = conn.prepareStatement(sql);pstmt.setBinaryStream(1, photoStream, (int) file.length();pstmt.executeUpdate();pstmt.close();conn.close(); catch (Exception e) e.printStackTrace();public static void main(String args)PutImg pi=new PutImg(); pi.putimg();InputStream photoStream = new FileInputStream(file);可以很清楚的看到我们首先把一个图片文件(当然也可以是别的什么文件)转换成了一个二进制输入流pstmt.setBinaryStream(1, photoStream, (int) file.length();这个方法建议大家去查一下 API 文档,第一个参数是通配符位置没的说,第二个参数是流,这和以往的 string 类型的参数不太一样,我刚看到的时候也觉得豁然开朗了,但是到这里还没完,不同于以往的字符串参数,这里我们还需要第三个参数来设置这个流的长度,这里也就是这个文件的长度,导出数据库中的 sql,一切都清楚了INSERT INTO m_diy VALUES (2,?0 JFIF0 0H0H00? Exif00MM0*000 0 0 000 0 00 0 000 000b 0 000 000j (0 000 0 00 10 000 000r 20 000 000?i0 000 000000000H000 000H000Adobe Photoshop CS Windows02007:03:18 23:08:1500000 ?0 000 ?00?0 000 000? 0 .等等其实就是将文件先转换成了二进制的流,然后插入到了 sql 语言中,向数据库写入了很长很长的一段 sql 语句然后我们再来写一个 app 程序将这个文件读出来,存储成一个图片文件package com.lizhe;import java.io.*;import java.sql.*;class GetImg private static final String URL = jdbc:mysql:/localhost/img?user=root&password=root&useUnicode=true&characterEncoding=gbk;private Connection conn = null; private PreparedStatement pstmt = null; private ResultSet rs = null; private File file = null; public void blobRead(String outfile, int picID) throws Exception FileOutputStream fos = null;InputStream is = null;byte Buffer = new byte4096;try Class.forName(org.gjt.mm.mysql.Driver).newInstance();conn = DriverManager.getConnection(URL);pstmt = conn.prepareStatement(select img from imgt where id=?);pstmt.setInt(1, picID); / 传入要取的图片的 IDrs = pstmt.executeQuery();rs.next();file = new File(outfile);if (!file.exists() file.createNewFile(); / 如果文件不存在,则创建fos = new FileOutputStream(file);is = rs.getBinaryStream(img);int size = 0;while (size = is.read(Buffer) != -1) / System.out.println(size);fos.write(Buffer, 0, size); catch (Exception e) System.out.println( e.getMessage(); finally / 关闭用到的资源fos.close();rs.close();pstmt.close();conn.close();public static void main(String args) try GetImg gi=new GetImg();gi.blobRead(c:/getimgs/1.jpg, 5); catch (Exception e) System.out.println(Main func error: + e.getMessage();这里需要注意的是is = rs.getBinaryStream(img);img 是数据库中相应的列名,其实和 rs.getString()方法差不多,只不过这个方法是读取二进制流的最后在帖两个 bs 系统上用的文件给大家参考通过 struts 的 action 向数据库写入二进制图片/* Generated by MyEclipse Struts* Template path: templates/java/JavaClass.vtl*/package com.lizhe.struts.action;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.Statement;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.upload.FormFile;import com.lizhe.struts.form.UpimgForm;/* * MyEclipse Struts* Creation date: 05-18-2007* * XDoclet definition:* struts.action path=/upimg name=upimgForm input=/userhomepage.jsp* struts.action-forward name=userhome path=/userhomepage.jsp redirect=true contextRelative=true*/public class UpimgAction extends Action /* Generated Methods*/* * Method execute* param mapping * param form* param request* param response* return ActionForward* throws IOException * throws FileNotFoundException */public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws FileNotFoundException, IOException UpimgForm upimgForm = (UpimgForm) form;/ TODO Auto-generated method stubFormFile file=upimgForm.getFile();InputStream is=file.getInputStream();try Class.forName(org.gjt.mm.mysql.Driver).newInstance();String url = jdbc:mysql:/localhost/blog?user=root&password=root&
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号