最近一直在整理struts2处理与数据库图片存取相关的code,网上也看了不少,结果总是差那么一点点(哈哈),没办法,只有手写个最原始的jdbc到Oracle存取的例子,没想到还有不少收获,顺便将自己的struts2的错误处理也贴上来,存储下。
javaeye的版主们看好了,我这可是存储啊!别再给我评什么茶贴还是什么里。
package com.core.test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import oracle.jdbc.OracleResultSet;
import oracle.sql.BLOB;
import com.common.bean.Personnel;
public class TestSQl {
/**
* @param args
*/
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String user = "xx";
String password = "111";
Connection con = DriverManager.getConnection(url, user, password);
Statement stmt = con.createStatement();
String sql = "";
con.setAutoCommit(false);
//***********************IO****************************
File file = new File("C:\\image\\haha.gif") ;
InputStream is = new FileInputStream(file);
ByteArrayOutputStream os = new ByteArrayOutputStream();
FileOutputStream fos = new FileOutputStream("C:\\image\\haha2.gif");
byte[] buffer = new byte[is.available()];
int b = 0;
while((b = is.read(buffer)) != -1){
os.write(buffer);
if(b > 1024) {
System.out.println(b);
}
}
byte[] photo = os.toByteArray();
System.out.println(photo.length);
ByteArrayInputStream bis = new ByteArrayInputStream(photo);
while(( b = bis.read(buffer)) != -1) {
fos.write(buffer);
}
//************************INSERT*******************************
//插入一条空记录
// sql = "insert into personnel(staffcode,staffname,password,deptcode) values('000115','xxoo','aaa','0001')";
// stmt.execute(sql);
// con.commit();
//***********************SQL*****************************
sql = "select * from personnel per where per.staffcode = '000114' for update";//设置更新,需要con.setAutoCommit(false)
sql = "select * from personnel per where per.staffcode = '000101'";
// sql = "select * from personnel " ;
ResultSet rs = stmt.executeQuery(sql);
List<Personnel> personnellist = new ArrayList<Personnel>();
while(rs.next()){
Personnel personnel = new Personnel();
personnel.setStaffcode(rs.getString("staffcode"));
personnel.setStaffname(rs.getString("staffname"));
personnel.setPhoto(rs.getBytes("photo"));
/*for update 将图片写入数据库*/
// BLOB blob = ((OracleResultSet)rs).getBLOB("photo");
// OutputStream out = blob.getBinaryOutputStream();
// InputStream in = new FileInputStream(new File("C:\\image\\haha2.gif"));
// int size = blob.getBufferSize();
// byte [] buf = new byte[size];
// int count = 0;
// while((count = in.read(buf)) != -1) {
// out.write(buf, 0, count);
// }
// in.close();
// out.close();
/*从数据库读取图片*/
BLOB blob2 = ((OracleResultSet)rs).getBLOB("photo");
InputStream in2 = blob2.getBinaryStream();
OutputStream out2 = new FileOutputStream(new File("C:\\image\\haha5.jpg"));
int size2 = blob2.getBufferSize();
byte [] buf2 = new byte[size2];
int count2 = 0;
while((count2 = in2.read(buf2)) != -1) {
out2.write(buf2, 0, count2);
}
in2.close();
out2.close();
personnellist.add(personnel);
}
con.commit();
for(Personnel pp : personnellist){
//注意pp.getPhoto().length
System.out.println(pp.getStaffcode() + ":: " + pp.getStaffname() + " :: " + pp.getPhoto().length );
}
is.close();
os.close();
bis.close();
fos.close();
con.close();
buffer = null;
photo = null;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
struts2存储
FileInputStream fis = null;
// OutputStream os = null;
try {
fis = new FileInputStream(file);
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
// os = new ByteArrayOutputStream();
// int b;
// while(( b = fis.read()) != -1) {
// os.write(b);
// }
//
System.out.println(buffer.length);
personnel.setPhoto(buffer);
personnelService.addPersonnel(personnel);
// fis.read(personnel.getPhoto());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if( fis != null ) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
struts2读取
HttpServletResponse response = null;
ServletOutputStream out = null;
InputStream in = null;
byte [] bytes = null;
personnel = personnelService.findPersonnel(staffcode);
try {
response = ServletActionContext.getResponse();
response.setContentType("image/jpeg");
out = response.getOutputStream();
in = new ByteArrayInputStream(personnel.getPhoto());
bytes = new byte [ in.available() ];
while ( -1 != in.read( bytes ) ) {
out.write( bytes );
}
out.flush();
// out.close();
// out = null;
// response.flushBuffer();
// out.clear();
// out = pageContext.pushBody();
} catch (IOException e) {
e.printStackTrace();
} catch ( Exception e ) {
e.printStackTrace();
}
finally {
if ( in != null ) {
try {
in.close();
} catch ( IOException e ) {
e.printStackTrace();
}
}
if ( out != null ) {
try {
out.close();
} catch ( IOException e ) {
e.printStackTrace();
}
}
bytes = null;
}
分享到:
相关推荐
请按 jConnect 文档中所述安装”是一个典型的错误信息,表明在尝试使用Java数据库连接(JDBC)驱动程序访问数据库时遇到了问题。这个错误代码JZ0SJ特指元数据存取器(Metadata Accessor)未找到,这通常是由于缺少...
这个小测试项目展示了如何通过Java处理图片流并将它们存储到数据库中,然后再取出。以下是关于这个过程的一些关键知识点: 1. **图片转二进制流**: 在Java中,我们可以使用`java.io`包中的`FileInputStream`或`...
通过这个简单的Java数据库中间件项目,你可以系统地学习和实践以上知识点,进一步提升你的Java编程和数据库技术能力。在实践中不断探索和优化,你将能够构建出更复杂、功能更完善的数据库中间件系统。
在数据存取对象(DAO)模式方面,书中的内容将指导读者如何设计和实现DAO层,以分离业务逻辑和数据访问逻辑,提升代码的可维护性和可测试性。同时,书中还会涉及如何使用Java Persistence API (JPA) 和Hibernate等...
5. 测试与优化:介绍系统的测试方法,包括单元测试和集成测试,以及性能优化的过程。 6. 结果与总结:展示系统的最终效果,对项目进行总结,提出改进意见和未来展望。 通过这个项目,学习者不仅可以掌握Java编程和...
在Web开发中,数据库连接是指应用程序通过特定的连接字符串和认证信息与数据库服务器建立通信的通道。这通常涉及到数据库驱动程序(如PHP的PDO或Java的JDBC),这些驱动程序允许程序与数据库进行数据交换。 在...
在这个"redis数据库java开发测试demo"项目中,我们将探讨如何在Java Web应用程序中集成Redis,进行数据的存取和测试。 首先,我们需要在项目中添加Jedis的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下...
标题中的“Oracle数据库大对象数据存取的两种实现方法及时间性能比较”指的是在Oracle数据库中处理大对象(LOB)数据的两种不同方法,并对比它们的性能。Oracle数据库中的大对象数据通常指的是非结构化的数据,如...
在这个Java操作MongoDB中存储的文件实例中,我们将探讨如何利用GridFS API进行文件的存取。 首先,我们需要在Java项目中引入MongoDB的驱动库。目前,Java驱动通常使用的是MongoDB Java Driver,可以在Maven仓库中...
8. **测试与调试**: 开发完成后,系统需经过严格的测试,包括单元测试、集成测试和系统测试,确保各个功能的正常运作。开发者可能使用JUnit等工具进行自动化测试,并利用IDE的调试功能定位和修复问题。 综上所述...
【Java数据库课程设计_简易餐厅管理系统】是一门实践性课程,旨在让学生掌握Java编程语言以及数据库设计的基础知识,通过设计并实现一个简单的餐厅管理系统来提升实际操作能力。在这个项目中,参与者将扮演三种角色...
在这个“简单的商品信息管理系统”教程中,我们将深入探讨如何使用Java编程语言与MySQL数据库结合,构建一个基础的增删改查(CRUD)系统。这个系统对于初学者来说是一个很好的起点,因为它涉及到许多核心的IT概念和...
ORMLite(Object-Relational Mapping Lite)是一种轻量级的Java ORM框架,它允许开发者将数据库操作与对象模型相结合,简化了数据库应用的开发过程。ORMLite提供了方便的方法来创建、查询、更新和删除数据库中的数据...
在这个项目中,很可能是使用关系型数据库管理系统(如MySQL或Oracle),因为它们适合处理结构化的数据,且与Java有良好的集成。 其次,Java作为后端开发语言,用于实现业务逻辑和数据库交互。在Java中,通常会使用...
在IT行业中,数据库是存储和管理数据的核心工具,而测试数据库连接是确保应用程序能够正常与数据库交互的关键步骤。本文将详细介绍如何测试数据库连接,以及如何使用数据库命令进行基本操作,如增、删、改、查。 ...
13. **测试与调试**:在开发过程中,单元测试、集成测试和压力测试是必不可少的,确保系统的正确性和性能。 以上是Java版公司人事管理系统的一些关键知识点,涵盖后端开发、数据库管理和系统设计等多个方面。实际...
数据库连接池是数据库管理中的重要概念,它在Java Web应用中尤其常见,主要用于优化数据库的连接管理和资源利用。自定义数据库连接池是为了更好地适应特定应用的需求,提高数据存取的效率,减少系统开销,避免频繁...
《EasyModels测试版2:数据库驱动的C#与JAVA实体类生成器》 在软件开发过程中,特别是涉及到数据库操作的应用程序,数据模型的构建是一项重要的基础工作。开发者常常需要手动编写与数据库表对应的实体类,这既耗时...
JAVA课程设计银行存取管理系统 本篇文章主要介绍了一个基于JAVA的银行存取管理系统的设计和实现。该系统的主要功能包括用户注册、登录、取款、存款、转账、修改密码、查询余额和查询修改信息等。系统的设计主要分为...
Java语言在电子平台中的应用越来越广泛,随着Java技术的成熟,如何高效地访问数据库成为了一个重要的问题。数据库存储着大量数据,其访问效率直接关系到整个应用程序的性能。Java通过JDBC(Java Database ...