- 浏览: 822293 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (488)
- struts1 (4)
- spring (13)
- extjs (36)
- mysql (3)
- sqlserver (2)
- oracle (37)
- 杂谈 (11)
- 面试相关 (35)
- Java基础知识总结 (5)
- Java重要知识点 线程和io流知识点 (6)
- 服务器相关 (1)
- 生活 (1)
- jsp (7)
- servlet (2)
- junit (3)
- struts2 (9)
- 开发必备 (4)
- 使用开发工具总结的知识 (4)
- ibatis (12)
- ajax (2)
- dwr (2)
- jquery (1)
- 设计模式 (4)
- Lucene的学习 (5)
- 经验总结 (19)
- mysql全文搜索相关 (7)
- hibernate (33)
- Sphinx (1)
- log4j的总结 (1)
- 敏捷开发 (9)
- 持续集成 (15)
- UML使用总结 (1)
- Scrum (1)
- OO(面向对象编程) (1)
- struts1和struts2总结 (1)
- 数据库加密 (1)
- 多线程和Socket编程 (6)
- PowerDesigner (2)
- 权限相关 (1)
- ant应用总结 (4)
- 面试必知知识点总结 (6)
- io流与nio流总结 面试相关 (1)
- 敏捷管理工具的使用 (7)
- hsqldb相关 (1)
- svn源码相关 (2)
- debug调试技巧总结 (1)
- hibernate和ibatis对比相关 (6)
- eclipse mylyn 插件的使用总结 (2)
- fisheye使用总结 (2)
- java泛型总结 (1)
- ssh整合总结 (10)
- SpringSide的学习总结 (1)
- JPA学习总结 (2)
- RoR 总结 (2)
- 模型驱动 总结 (1)
- Oracle SQL优化技巧 (4)
- 数据库相关资料 (1)
- oracle练习相关 (4)
- PowerDesigner 使用总结 (2)
- Struts实现国际化相关 (2)
- 权限框架 Spring Security (1)
- freemarker使用总结 (1)
- jsp servlet总结相关 (3)
- Java NIO总结 (1)
- 自己学习必须 (3)
- 蝴蝶容器相关 (2)
- eclipse插件的使用 (1)
- myeclipse的使用 (1)
- flex相关 (1)
- javaeye重生后总结的知识点 (2)
- 公司学习总结 (3)
- JAXB 相关 (1)
- ECSide (1)
- EdoJs 企业ajax框架 (1)
- RSA加密算法 (1)
- jbpm相关 (1)
- JMF原理 (1)
- MyEclipse使用总结 (1)
- Funsion Charts 相关总结 (3)
- 常用知识2011 (2)
- Flex与Java整合 (1)
- IBM WebSphere相关 (1)
- jQuery使用技巧 (2)
- 2011年面试相关知识点总结 (2)
- sqlserver开发相关 (8)
- eclipse 打jar相关 (2)
- Oracle/Mysql/SqlServer比较 (1)
- WebService Axis1.4开发相关 (4)
- 进制数的转换 总结 (1)
- WebService Axis2.0开发相关 (0)
- iteye Struts2 Spring Hibernate整合相关 (3)
- iteye osgi资料相关总结 (1)
- iteye ifos相关相关 (1)
- iteye 国际化相关 (1)
- iteye Hibernate缓存机制 (4)
- iteye Struts2 总结 (1)
- iteye Struts标签总结 (0)
- iteye web配置文件大全 (6)
- iteye Efs 框架总结 (1)
- iteye sql优化 (2)
- iteye 大数据量高并发的数据库优化 (1)
- iteye 开发相关 (1)
- iteye s1sh 和 s2sh整合中的问题以及解决 (1)
- iteye s1sh整合实例 (1)
- iteye s2sh整合实例 (1)
- iteye 面试相关 基础篇 (1)
- iteye Android相关 (1)
- iteye 面试相关 Web篇 (1)
- iteye Sql Server相关 (0)
- iteye struts1与struts2比较 (1)
- iteye jquery 和Struts2 (0)
- iteye struts2与其他插件整合 (0)
- iteye jquery 开发相关 (1)
- iteye eclipse结合spket(Ext,Jquery)开发相关 (0)
- iteye myeclipse 使用技巧相关 (0)
- iteye Memcached 缓存系统相关 (0)
- iteye 常用软件相关 (0)
- iteye 最新技术预览 AjaxSwing (0)
- iteye struts上传下载相关 (0)
- iteye 新技术相关 (0)
- test (0)
- iteye 开发Java游戏相关 (0)
- iteye Java反编译 (0)
- iteye XML解析相关 (0)
- iteye 压缩ZIP相关 (0)
- iteye 面试相关 (0)
- iteye Android开发相关 (4)
- csdn (0)
- e-inoc (0)
- iteye http错误码对应说明 (0)
- iteye 面试扩展知识点 (0)
- iteye oracle面试相关 存储过程,触发器,游标等 (0)
- iteye english study (0)
- iteye starflow工作流引擎 (0)
- iteye IBM WebSphere Application Server Toolkit使用相关 (0)
- iteye spring3 (0)
- iteye mybatis (0)
- iteye js技巧总结 (0)
- iteye SEO优化相关 (2)
- iteye QUI网页界面集成框架 (1)
- iteye AjaxAnywhere (1)
- iteye Nutz相关 (1)
- iteye ibatis技巧 (0)
- iteye dwz (0)
- 128个ajax/javascript框架 (0)
- iteye 2012 Java Swing教程 (1)
- iteye 码头集装箱相关 (1)
- iteye swing (2)
- 兼职工作 (0)
- 2012 新总结的面试相关知识点 常用知识点 (1)
- 淘宝网店相关 (0)
- oracle 常用函数 2012新总结 (1)
- 我的时尚潮流屋 (0)
- 2012 年 面试新总结知识 (1)
- 技巧 (1)
- 2013总结 (1)
- 2015工作相关 (3)
- springmvc (5)
- EasyPR-Java (1)
- java (2)
- editplus 4.0 注册码 (1)
- android (1)
- oracle连接数据库相关 (1)
- 编程资料总结 (2)
- 20160808 (1)
- visio 2013 (1)
最新评论
-
drew926:
泛型的类型参数可以有多个?这是java哪个版本支持的?
java泛型总结 -
listenan:
赞!非常感谢。
Scrum总结 -
cwscwj:
写的很深刻,谢谢,看了一遍,过段时间打算再看一遍。
Scrum总结 -
hwedwin:
w
Struts 2中的OGNL\EL的使用总结 -
lanni2460:
不错 很好 支持……
sqlserver三个驱动包下载
如何通过java或jsp向数据库存取二进制图片
前几天突然看到学校音乐站上的图片原来是存储在数据库上的,是二进制而不是使用路径保存的,在网上招了找发现大多介绍的都是hph方式,在这里做个总结,首先要存储二进制文件在数据库中要搞清楚下面几个内容:
1 mysql存储大容量的二进制文件的格式是blob,其实除了图片还可以存别的
2 要向数据库存储二进制的文件一定要把要存储的数据转换成二进制流
废话就不多说了,大家看看代码很容易明白,先来看一个app程序,当然首先您要在数据库中先建立一个用于保存图片的表和相应的列,数据格式为blob
前几天突然看到学校音乐站上的图片原来是存储在数据库上的,是二进制而不是使用路径保存的,在网上招了找发现大多介绍的都是hph方式,在这里做个总结,首先要存储二进制文件在数据库中要搞清楚下面几个内容:
1 mysql存储大容量的二进制文件的格式是blob,其实除了图片还可以存别的
2 要向数据库存储二进制的文件一定要把要存储的数据转换成二进制流
废话就不多说了,大家看看代码很容易明白,先来看一个app程序,当然首先您要在数据库中先建立一个用于保存图片的表和相应的列,数据格式为blob
package 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,? JFIF HH?? ExifMM* b j ( 1 r 2 ?i H H Adobe Photoshop CS Windows2007:03:18 23:08:15 ? ??? ? ........等等 其实就是将文件先转换成了二进制的流,然后插入到了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 byte[4096]; 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); // 传入要取的图片的ID rs = 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 stub FormFile 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&useUnicode=true&characterEncoding=gb2312"; Connection conn = DriverManager.getConnection(url); Statement stmt = conn.createStatement(); //stmt.execute("insert into img (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 img (img) VALUES (?)"; pstmt = conn.prepareStatement(sql); pstmt.setBinaryStream(1, is, (int) file.getFileSize()); pstmt.executeUpdate(); pstmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } return mapping.findForward("userhomepage"); } } 和app的方式几乎是一样的 第二个文件是通过jsp将数据库中的图片显示在页面上 这个有些不同 <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.sql.*" %> <%@ page import="java.util.*"%> <%@ page import="java.text.*"%> <%@ page import="java.io.*"%> <%@ page import="java.awt.*"%> <html> <body> <% Class.forName("org.gjt.mm.mysql.Driver").newInstance(); String url="jdbc:mysql://localhost/img?user=root&password=root"; Connection con = DriverManager.getConnection(url); String sql = "select * from imgt where id=5"; Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(sql); if(rs.next()) { InputStream in = rs.getBinaryStream("img"); ServletOutputStream op = response.getOutputStream(); int len; byte[] buf=new byte[1024]; while((len= in.read(buf))!=-1) { op.write(buf, 0, len); } op.close(); in.close(); } rs.close(); stmt.close(); con.close(); %> </body> </html>
相关推荐
然后,从请求中获取用户的输入信息,并将文件数据转换为二进制流,最终通过PreparedStatement执行SQL插入操作,将图片数据存储到数据库的`ImageData`字段中。 #### 五、总结 通过以上步骤,我们可以实现一个完整的...
"利用Java程序实现Oracle数据库中大对象的存取" ...使用Java程序实现Oracle数据库中大对象的存取可以通过jdbc驱动程序连接Oracle数据库,并使用PreparedStatement对象执行SQL语句,实现对大对象的存储和读取。
1. BLOB类型:Oracle数据库提供了BLOB(Binary Large Object)数据类型,用于存储大块二进制数据,如图片。在创建表时,我们需要定义一个BLOB字段来保存图片内容。 2. CLOB与NCLOB:对于文本格式的图片(如Base64...
- BLOB(二进制大对象):用于存储大型二进制数据,如影像、图片等,其长度可达4GB,支持随机存取。 - BFILE:虽然用于存储大型二进制数据,但数据实际存储在文件系统中,数据库中仅存储指向文件的指针,Oracle对...
为了显示数据库中的图片,我们可以创建一个新的JSP页面,通过查询数据库获取图片的二进制数据,然后将其写入响应流。这里不再展示具体的代码,但基本思路是:先根据图片ID查询数据库,获取到图片的二进制数据,然后...
MySQL Connector/J是MySQL数据库与Java应用程序之间的重要桥梁,它提供了Java Database Connectivity (JDBC) API,使得Java开发者能够方便地在应用中存取MySQL数据库。标题"mysql-connector-java-3.1.11-bin"指出这...
6. **antlr-2.7.6rc1.jar**:ANTLR是一个强大的解析器生成器,可以用于读取、处理、执行或翻译结构化文本或二进制文件。在JSP中,可能用于解析和生成语法树。 7. **jboss-cache.jar**:这是JBoss的一个缓存解决方案...
2. **提供Java存取数据库能力的包是。** - **答案解析:** 正确答案为A。Java中用于访问数据库的主要包是`java.sql`,它提供了与数据库交互的基本接口和类,如`Connection`、`Statement`、`ResultSet`等。 3. **...
字节流与字符流的区别:字节流用于读写二进制数据,字符流用于读写文本数据。 final、finally、finalize三者区别:final用于声明常量,finally用在try-catch-finally语句中表示必须执行的代码块,finalize是Object...
实例中可能会展示如何创建WebSocket服务器端点以及客户端连接,以及如何通过WebSocket发送和接收文本或二进制数据。 3. **JSP与HTML/CSS/JavaScript** JSP(JavaServer Pages)是Java Web开发中的视图层技术,用于...
COM组件通过接口定义来实现功能的封装,支持二进制级别的互操作性。而CORBA(Common Object Request Broker Architecture)是一种跨平台的组件架构,由OMG(Object Management Group)制定,旨在解决分布式计算环境...
20. 二进制扩展:在无符号二进制整数后面添加0,相当于左移一位,值翻倍。 21. 十进制转二进制:58转换成二进制是111010,这是正确的。 22. 完全二叉树的叶子节点计算:对于含有n个节点的完全二叉树,如果n是奇数...
它通过网络进行通信,并使用二进制协议,提供高效的数据交换。 3. **Memcached客户端库**: 为了在Java应用中使用Memcached,我们需要一个Java客户端库。常见的有spymemcached、xmemcached等。这些库提供了与...
10. 位移运算:`a>>1`表示将变量`a`的二进制表示右移一位,对于整型变量6(二进制110),右移一位后得到3(二进制011)。 11. Access退出快捷键:Alt+F+X是退出Access的快捷键。 12. 选择多个图标:在Windows中,...
18. IP地址:IP地址由32位二进制数组成,而不是十进制。 19. Word段落标记:段落标记在打印时不被打印出来。 20. Visual FoxPro删除记录:SQL的DELETE命令可以直接删除记录,无需先用USE命令打开表,而传统的...
9. 数制转换:八进制转换为二进制,每位八进制数对应三位二进制数。 10. RAM:随机存取存储器(RAM),是计算机中的一种临时存储数据的硬件,对数据可存可取。 11. 数组初始化:在Java中,执行`int[] x = new int...
1. **像素值篡改**:通过修改图像的像素值来隐藏信息,比如使用LSB(Least Significant Bit)技术,将数据的二进制位替换图像像素的最低有效位。 2. **频域隐藏**:利用傅立叶变换,将秘密信息隐藏在图像的频率域中...
GET请求常用于获取信息,而POST请求可以传递更复杂的数据,包括二进制数据。在HTML表单中,可以通过method属性设置提交方法,默认为GET。 开发JavaWeb项目时,需要按照特定的目录结构组织源代码。创建Web项目后,...
14. JSP页面可以通过表单或超链接访问Servlet,这是Web应用的基本交互方式。 15. HTTP的GET请求可以获取各种类型的数据,包括HTML、图片、视频等。 16. SqlCommand对象的方法中没有ExecuteRead(),应该是...