--------写入Oracle的图片
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.sql.BLOB;
public class JdbcDemo {
public static void main(String[] args) {
JdbcDemo obj=new JdbcDemo();
obj.append_pic_to_Oracle();
}
private void append_pic_to_Oracle()
{
Connection conn=null;
BLOB blob=null;
int foodid=84;
try {
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@10.18.45.17:1521:orcl";
conn=DriverManager.getConnection(url,"wangjun","wangjun");
conn.setAutoCommit(false); //把默认提交关闭,即开启了JDBC连接事务
//seq_foodinfo 是一个序列
String sql="insert into foodinfo values(seq_foodinfo.nextval,?,?,?,empty_blob(),?)";
PreparedStatement pstmt=conn.prepareStatement(sql);
pstmt.setString(1, "拉面");
pstmt.setString(2,"原料:青菜、猪肉、海带、骨头口味");
pstmt.setDouble(3, 4);
pstmt.setString(4, "好吃");
//没有返回值就用update
pstmt.executeUpdate();
pstmt.close();
strsql="select image from foodinfo where foodid=? for update"; //锁定即将要更新的记录
pstmt=conn.prepareStatement(strsql);
pstmt.setInt(1, foodid);
ResultSet rs= pstmt.executeQuery();
if(rs.next())
{
//当前找到blob
blob= (BLOB)rs.getBlob(1);
}
File f=new File("d:/funny/images/500024.jpg");
FileInputStream fis=null;
if(f.exists())
{
fis=new FileInputStream(f);
}
strsql="update foodinfo set image=? where foodid=?";
pstmt=conn.prepareStatement(strsql);
OutputStream os=blob.getBinaryOutputStream();
//为图片开辟一条缓存空间
byte[] buffer=new byte[(int)f.length()];
fis.read(buffer);
os.write(buffer);
fis.close();
os.close();
pstmt.setBlob(1, blob);
pstmt.setInt(2, foodid);
pstmt.executeUpdate();
conn.commit();
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
finally
{
try {
//连接不等于空或者没有关闭的时候
if(conn!=null || !conn.isClosed())
{
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
------------------------------------------------------------------------------
----------------在网页中输入图片
先建一个数据库的公用类 DBSession.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBSession {
private static final String DRIVER="oracle.jdbc.driver.OracleDriver";
private static final String URL="jdbc:oracle:thin:@10.18.45.17:1521:orcl";
private static final String USERNAME="wangjun";
private static final String PWD="wangjun";
public static Connection getConnection(){
Connection conn=null;
try {
Class.forName(DRIVER);
conn=DriverManager.getConnection(URL,USERNAME,PWD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void closeConn(Connection conn)
{
try {
if(conn!=null || !conn.isClosed())
{
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
在写一个取出图片的servlet 类
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.webapp.comm.DBSession;
public class GetPicture extends HttpServlet{
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String foodid =request.getParameter("foodid");
response.setContentType("image/jpg");
Connection conn=DBSession.getConnection();
String strsql="select image from foodinfo where foodid=?";
try {
PreparedStatement pstmt=conn.prepareStatement(strsql);
pstmt.setInt(1,Integer.parseInt(foodid));
ResultSet rs=pstmt.executeQuery();
if(rs.next())
{
Blob blob= rs.getBlob(1);
InputStream is= blob.getBinaryStream();
OutputStream os= response.getOutputStream();
byte[] buffer=new byte[1024*4];
int sss=0;
while((sss=is.read(buffer))!=-1)
{
os.write(buffer,0,sss);
}
is.close();
os.flush();
os.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
finally
{
DBSession.closeConn(conn);
}
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
}
}
在写一个jsp代码 能去取出代码
<html>
<head>
<title></title>
</head>
<body>
<img src="getPic?foodid=${param.foodid}" >
</body>
</html>
分享到:
相关推荐
Java可以使用JDBC API来操作BLOB字段,将图片数据写入或读出。 批量上传时,为了提高性能和减少内存消耗,可以采用流式处理。例如,利用`InputStream`和`OutputStream`直接读写文件,避免一次性加载整个文件到内存...
例如,使用Java的JDBC,可以使用`ResultSet.getBinaryStream()`方法获取流,然后用`FileOutputStream`写入文件。 4. **性能优化**: 图片存储在数据库中可能影响性能,因为I/O操作相对昂贵。考虑将图片存储在文件...
要从数据库中读出文件,可以使用以下Java代码: ```java public void readBlob() throws SQLException, IOException { String sql = "SELECT image FROM blobmodel WHERE blobid=?"; DBHelper.getConnection(); ...
本文将深入探讨如何使用Oracle数据库构建一个台账管理系统,并通过后台登录系统实现数据的写入与读出。 Oracle数据库是全球领先的数据库解决方案之一,它提供了丰富的数据类型、高级的事务处理能力和强大的安全性。...
### Java IO 概念与基础知识 #### 一、Java IO 的概念和...通过以上内容,我们可以了解到Java IO的基础知识、常用流的特性和使用方法,以及如何进行性能优化等方面的知识点。这对于理解Java程序中的IO操作非常关键。
在Java的JDBC4.0版本中,处理Oracle数据库中的BLOB(Binary Large Object)类型数据是一项常见的任务,尤其在存储和检索大容量的二进制数据,如图像、音频或视频文件时。本篇文章将深入讲解如何使用JDBC4.0与Oracle...
这些数据可以通过WebWord的API写入或读出到Word文档中。 4. **安全性与权限**:由于涉及到用户数据和数据库操作,安全性是个重要问题。开发者需要确保所有数据库操作都经过验证和授权,防止未授权的访问或修改。 5...
- 在处理文本数据时,需要注意字符编码的一致性,确保从数据库读取的数据与文件写入时使用的编码一致。 2. **性能优化**: - 当处理大量数据时,应考虑使用流式处理来减少内存占用。 - 考虑使用更高效的字符集...
对CLOB和BLOB数据类型的操作是非常重要的,特别是在使用Java数据库连接(JDBC)时。本文将详细介绍JDBC实现对CLOB和BLOB数据类型的操作,包括读取和写入操作。 CLOB数据类型 CLOB数据类型用于存储大型字符数据,如...
与Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅...