`
harrison2010
  • 浏览: 108406 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

从数据库(mysql)存取图片

阅读更多

关键字:mysql jsp 图片存取
为了使用JSP灵活,需要把各种文件储存到数据库中,然后需要的时候把它读取出来显示到客户端。这些文件包括音乐,图片,文本等,人们统称为二进制文件。
 
首先,二进制文件储存到数据库的过程:打开文件,将内容读到缓冲区,然后直接联线创建jdbc语句对象,使用该缓冲区的数据,并执行更新,就完成了储存。
 
例子:
     首先在mysql中创建一个表 picture_db
 
 
create table picture_db(
 file_name varchar(255) not null,
 content longblob,
 primary key (file_name));
 

 

接下来就是用java写储存文件的代码:

假设要储存的图片名称是:01.jpg (放在同一个目录下)

 


import java.sql.*;
import java.io.*;
import java.nio.*;
public class UploadImage {
    protected Connection dbConnection;
    protected String driverName = "com.mysql.jdbc.Driver";
    protected String dbURL = "jdbc:mysql://localhost:3306/sample_db";
  protected String userID = "root";
  protected String passwd = "yourpassword";

    public boolean storeImage(String sqlstr,File file){
        try{
            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);
                else
                    nbf.put(array);
                offset+=length;
               
            }
            fin.close();
            byte[] content = nbf.array();
            return setImage(sqlstr,content);
           
        }catch(FileNotFoundException e){
            e.printStackTrace();
            }catch (IOException e){
                e.printStackTrace();
                }
            return false;
   
    }
   
    private boolean setImage(String sqlstr,byte[]in){
        boolean flag = false;
        if(sqlstr==null)
            sqlstr="select * from picture_db";
        try{
             Class.forName(driverName);
             dbConnection = DriverManager.getConnection(dbURL,userID,passwd);
             Statement stmt = dbConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
             ResultSet rs = stmt.executeQuery(sqlstr);
             if(rs.next()){
              rs.updateBytes(2,in);
             rs.updateRow();
             }
             else{
                 rs.moveToInsertRow();
                 rs.updateString(1,"01");
                 rs.updateBytes(2,in);
                 rs.insertRow();
             }
             rs.close();
             flag=true;
            

        }catch(Exception e){
            e.printStackTrace();
        }
        return flag;
       
    }

   
    public static void main(String[] args){
        UploadImage upload = new UploadImage();
        try{
            File file = new File("01.jpg");
            if(upload.storeImage(null, file))
            System.out.print("ture");
            else
                System.out.print("False");
           
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

 

 

如果执行成功的话,系统打印“true" 否则“false".

最后就是将图片度取出来:与储存的过程相反,它是县建立连接,创建数据库查询的jdbc对象,使用该语句来返回二进制结果,保存到文件当中。

showImage.jsp

 

 

<%@ page contentType = "image/jpeg;charset=GB2312"%>
<%@ page import="java.sql.*"%>

<%@ page import="java.io.*"%>
<%@ page import="com.sun.image.codec.jpeg.*"%>
<%@ page import="javax.imageio.*"%>
<%@ page import="java.awt.image.*"%>

<html>
<head>
<meta http-equiv="Content-Type" content="image/jpeg;charset=GB2312">
<title>showDBImage</title>
</head>
<body>
<%
String showImage ="select * from picture_db where file_name ='01'";
Connection conn = null;
BufferedInputStream inputImage = null;

 String driverName = "com.mysql.jdbc.Driver";
       String dbURL = "jdbc:mysql://localhost:3306/sample_db";
       String userID = "root";
       String passwd = "yourpassword";

 

try{
     Class.forName(driverName).newInstance();   
    conn = DriverManager.getConnection(dbURL,userID,passwd);

    Statement st = conn.createStatement();
    ResultSet rs = st.executeQuery(showImage);
    while(rs.next()){
        Blob blob = (Blob)rs.getBlob("content");
        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 e)
{
    e.printStackTrace();
}catch(IOException e){
    e.printStackTrace();
}
%>
</body>
</html>

 

 

执行的时候

http://localhost:8080:你的应用程序目录/showImage.jsp

就可以看到自己上传的照片了。


该文章转载自网络大本营:http://www.xrss.cn/Dev/JAVA/200781815763.Html 

分享到:
评论

相关推荐

    Mysql数据库中存取图片的Java实现.pdf

    Mysql 数据库中存取图片的 Java 实现 MySQL 数据库中存取图片的 Java 实现可以通过两种方式实现:一种是将图片单独存放在固定文件夹里,数据库表中对应的字段仅保存该图片的路径和名字 ;另一种是先对图片进行编码...

    Java实现用Mysql存取图片操作实例

    // 从数据库读取图片并保存到本地 con = DB.getConn(); ps = con.prepareStatement("SELECT * FROM test.phototest WHERE id = ?"); ps.setInt(1, 2); rs = ps.executeQuery(); rs.next(); // 将光标指向第一...

    利用数据库存取图片,从数据库读取显示出来

    在标题“利用数据库存取图片,从数据库读取显示出来”中提到的方法,意味着我们将直接把图片的数据存储在数据库内,而不是仅仅保存图片的文件路径。这种方法在某些场景下可能是必要的,例如,如果需要确保图片与相关...

    SQL数据库里存取图片

    接下来将深入探讨在SQL数据库中存取图片的概念、技术方法和实践操作。 ### 知识点一:图片存储的数据模型 首先需要明确的是,图片在数据库中是以二进制大型对象(BLOB)的形式存储。BLOB类型是专门用来存储大量的...

    C#中图片的存取(数据库中存取图片文件的路径)

    5. **图片的检索**:当需要显示图片时,从数据库中查询图片的路径,然后在前端使用`&lt;img&gt;`标签展示。例如,`;base64, @Html.Raw(Convert.ToBase64String(Model.ImagePath)) /&gt;`。这里的`ImagePath`是从数据库中获取...

    c# MySql数据库存储图片

    当你需要从数据库检索图片时,可以使用类似的方法查询`Images`表,并将`ImageData`字段的二进制数据写入文件: ```csharp int imageId = 1; // 假设已知图片ID string outputFilePath = "output.jpg"; using (var ...

    MySQL数据库存取例子代码

    【MySQL数据库存取例子代码】是一个关于如何与MySQL数据库进行交互的编程示例。这个压缩包包含了一系列的源代码文件,适用于那些想要学习或实践如何在C++环境中使用MySQL数据库的开发者。以下将详细讲解这些文件及其...

    数据库中存取图片

    这种方式不仅适用于Access,也可以扩展到其他支持BLOB存储的数据库系统,如SQL Server或MySQL。 值得注意的是,当图片数量庞大时,可能会占用大量数据库空间,因此在设计系统时要考虑性能和存储效率。另外,对于...

    Python操作MySQL数据进行图片存取操作

    在进行图片存取操作之前,我们首先需要在MySQL数据库中建立一个库,本次实验的数据表名称为thumbnail,包含了三个字段:IdImg,NameImg和DataImg。其中,IdImg是图片ID,字段值自动增加;NameImg用于存储图片的...

    C#实现数据库的图片存取

    在这个例子中,我们将深入探讨如何使用C#实现数据库中的图片存取。 首先,我们需要一个数据库来存储图片数据。在C#中,我们通常会使用ADO.NET库来与SQL Server、MySQL、SQLite等数据库进行交互。以SQL Server为例,...

    PB9数据库存取图片

    以下将详细解释如何在PB9中进行数据库存取图片的操作。 首先,我们需要创建一个能够存储图片的数据库表。这个表通常会包含一个或多个字段,其中一个是BLOB类型的字段,例如“ImageData”。在SQL数据库(如MySQL、...

    C# 图片数据库存取示例

    本示例将探讨如何使用C#来处理图片的数据库存取,这对于创建图像管理应用、在线画廊或者任何需要存储和检索图像信息的系统至关重要。以下是关于这个主题的详细讲解。 一、数据库选择 在存取图片时,我们首先需要...

    如何基于java向mysql数据库中存取图片

    "基于Java向MySQL数据库中存取图片" 在本文中,我们将介绍如何使用Java语言向MySQL数据库中存取图片。首先,我们需要了解MySQL数据库中的Blob类型,它是一个二进制类型,通常我们会将图片或音像文件转成二进制再...

    VB 数据库存取图片 示例代码

    以下是一个简化的VB代码示例,演示了如何存取图片到数据库: ```vb Imports ADODB Imports System.IO ' 连接数据库 Dim conn As New Connection conn.ConnectionString = "your_connection_string" ' 存储图片 ...

    PHP 存取 MySQL 数据库的一个例子

    PHP 存取 MySQL 数据库的一个例子 本文档提供了一个使用 PHP 存取 MySQL 数据库的示例代码,该示例演示了如何使用 PHP 连接 MySQL 数据库、执行插入操作、查询数据并将其显示在网页上。 连接 MySQL 数据库 在示例...

    C#数据库存取图片

    2. **从数据库读取图片**: - **查询图片数据**:使用SqlCommand创建SELECT语句,获取指定ID或名称的图片数据。 - **处理返回结果**:执行命令后,通过SqlDataReader读取返回的二进制数据。 - **写入文件**:将二...

    C#数据库存取图片详细

    在C#编程中,将图片存入数据库以及从数据库中取出是常见的操作,尤其是在构建包含多媒体元素的应用程序时。本文将深入探讨如何使用C#与数据库进行图片的存储和读取,主要涉及以下知识点: 1. 数据库选择:首先,...

    vc 存取数据库中的图片实例

    在VC++编程环境中,存取数据库中的图片是一个常见的需求,特别是在开发涉及到图像管理的应用程序时。这个实例将向我们展示如何以二进制数据的形式在数据库中存储和检索图片。以下是一个详细的步骤和知识点解析: 1....

    图片在数据库中的存取

    从数据库中检索图片则相对简单,只需执行一个SELECT查询,并将结果转换回图片文件。可以使用`MemoryStream`和`File.WriteAllBytes`将二进制数据写回到磁盘上。 ```csharp // 查询图片数据 SqlCommand selectCommand...

    黑马程序员 数据库MYSQL.docx

    * SQL 语句是数据库认识的语言,用于存取数据以及查询、更新和管理关系数据库系统。 * 结构化查询语言(Structured Query Language),简称 SQL。 3.2 SQL 语句分类 * 数据定义语言(Data Definition Language),...

Global site tag (gtag.js) - Google Analytics