往MYSQL中插入,读写图片!
来源:互联网 发布:电脑编程培训费用 编辑:程序博客网 时间:2024/05/14 07:29
开发环境:MyEclipse+MySql
1, 随便找一个数据库建一张表,我这里用的是mysql数据库,
(1)切换到mysql数据库:use mysql;
(2)建表create table image(
name char(20) not null primary key,
image longblob
);
PS:注意存放图片那个字段的类型,为longblob,把name这个字段设置成主键,以防后面插入图片发生错误!
(3)然后我们插入名字,方便查找
insert into image (name) value ('image');
2,其实很简单,只有三个文件:
UploadImage.java:负责将图片存入数据库
showImage.jsp:负责将图片从数据库中读出来
index.jsp:负责显示,插入图片等操作
先上效果图:
然后咱们来看整个项目的大体框架:
闲话少说,上代码:
UploadImage.java
public class UploadImage {String userName="root";String password="123456";Connection conn=null;Statement stmt=null;String url="jdbc:mysql://localhost:3306/mysql";public boolean storeImage(String path,String sql) {try {File file = new File(path);//打开文件FileInputStream fin = new FileInputStream(file);//建一个缓冲保存数据ByteBuffer nbf = ByteBuffer.allocate((int) file.length());byte[] array = new byte[1024];int offset = 0, length = 0;//读存数据while ((length = fin.read(array)) > 0) {if (length != 1024)nbf.put(array, 0, length);elsenbf.put(array);offset += length;}//关闭文件fin.close();//新建一个数组保存要写的内容byte[] content = nbf.array();//保存数据return setImage(sql, content);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}//如果发生文件读写错误都会返回falsereturn false;}private boolean setImage(String sqlstr, byte[] in) {boolean flag = false;if (sqlstr == null)sqlstr = "select * from image";try {Class.forName("com.mysql.jdbc.Driver");conn=DriverManager.getConnection(url,userName,password);stmt =conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);ResultSet rs = stmt.executeQuery(sqlstr);if (rs.next()) {rs.updateBytes(2, in); //2表示更新第二个字段,即image这个字段rs.updateRow();} else {rs.moveToInsertRow();rs.updateBytes(2, in);rs.insertRow();}rs.close();flag = true;} catch (Exception e) {e.printStackTrace();}return flag;}}
由于JSP一直提倡java代码与jsp页面分离,java代码负责逻辑控制,jsp页面负责显示,所以我们只要我们在jsp页面调用上面那个类即可,这样jsp页面看起来就非常干净整洁!
showImage.jsp
<%@ page language="java" contentType="image/jpeg;charset=GB2312"%><%@ page import="java.io.*"%><%@ page import="java.sql.*"%><%@ page import="java.awt.image.*"%><%@ page import="javax.imageio.*"%><%@ page import="com.sun.image.codec.jpeg.*"%><html> <head> <meta http-equiv="Content-Type" content="image/jpeg; charset=GB2312"> <title>showDBImage.jsp</title> </head> <body><%String userName="root";String password="123456";Connection conn=null;String url="jdbc:mysql://localhost:3306/mysql";String showImage = "select * from image where name='image';" ;BufferedInputStream inputImage = null;try{Class.forName("com.mysql.jdbc.Driver");conn=DriverManager.getConnection(url,userName,password);Statement st = conn.createStatement();ResultSet rs=st.executeQuery(showImage);while(rs.next()) {Blob blob = (Blob)rs.getBlob("image");inputImage = new BufferedInputStream(blob.getBinaryStream()); } BufferedImage image = null; image=ImageIO.read(inputImage);ServletOutputStream sos = response.getOutputStream();JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos);encoder.encode(image);inputImage.close();} catch(SQLException se) {se.printStackTrace();} catch(IOException ie) {ie.printStackTrace();}%> </body></html>
index.jsp
<%@ page language="java" import="java.util.*,com.njue.image.*" pageEncoding="gb2312"%><%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>My JSP 'index.jsp' starting page</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">--><script language="javascript" type="text/javascript"> function login(){ var path=document.getElementById("file"); path.select(); var realpath = document.selection.createRange().text; if(realpath!=null&&realpath.length>0){var r=confirm("你确定将这张图片存入MYSQL数据库吗?"); if(r==true){window.location="index.jsp?realpath="+realpath;}}else{alert("没有选择图片!");}}</script> </head> <body background="background.jpg"> <div align="center" style="margin-top:15%;"> <% String realpath=request.getParameter("realpath"); if(realpath!=null&&realpath.length()>0){ String sql="select * from image where name='image';"; UploadImage image=new UploadImage(); if(image.storeImage(realpath,sql)){ %> <h1>成功插入图片!</h1><br> <img src="showImage.jsp"/><br><br> <% } else{ %> <h1>插入图片失败!</h1> <% } } %> <input type="file" name="file"/> <a href=javascript:login()>确定</a> </div> </body></html>
把我期间遇到的问题列出来:
1,javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/aspectj/lang/Signature
如果出现这个错误,多半是mysql的驱动有问题了
mysql-connector-java-3.1.10-bin.jar
mysql-connector-java-3.1.10-bin-g.jar
大家可以看出一个后面有-g,一个没有,这里大家应该用第一个,将他复制进WebRoot/WEB-INF/lib这个文件夹中即可,
有兴趣的可以下载整个工程!
下载地址:http://download.csdn.net/detail/pzhtpf/4177978
- 往MYSQL中插入,读写图片!
- 往MYSQL中插入,读写图片!
- 向MySQL中插入读取图片
- 向mysql中插入数据(时间,图片)
- Qt中整合MySQL,向MySQL中插入图片
- mysql插入图片
- mysql插入图片数据
- Mysql插入图片
- 用用sql语句将插入图片到mysql数据库中
- 利用Java+POI 读写Excel文档&向Excel中插入图片
- JTable中插入图片
- Latex 中插入图片
- latex中插入图片
- 图片插入EditView中
- EditView中插入图片
- beamer中插入图片
- latex中插入图片
- EditText中插入图片
- 对三目运算符的反汇编。
- Notepad++ 支持 ExtJS 提示(JavaScript提示)
- 计算机作业
- Java中hashmap和hashtable的区别
- 学习VB编程感想
- 往MYSQL中插入,读写图片!
- Android Application Task Activities的关系
- UNIX网络编程学习(12)--对两个数求和的str_echo函数-以及sscanf的用法
- 第六周实验报告3
- zoj 3590 -3+1
- Flex的Array和ArrayCollection
- hdu 1251 统计难题(trie树)
- CSDN上看到的一篇有关Spring JDBC事务管理的文章(内容比较全)
- 第六周任务五