Advertisement

Java中使用MySQL存储和检索图片的示例代码

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:PDF


简介:
本示例展示了如何在Java应用程序中利用MySQL数据库进行图片的数据存储与检索操作,提供详尽的源码解析。 在Java编程过程中,有时需要将图片这样的大容量二进制数据存储到数据库里。MySQL为此提供了BLOB(Binary Large Object)类型,专门用于处理大量二进制信息的存储需求。 我们首先来了解下MySQL中的BLOB类型:它是一个适用于存放大块二进制数据的数据字段类型,并不受字符集限制,适合于图像、音频或视频文件等类型的储存。在MySQL中存在四种不同大小的BLOB类型: 1. TINYBLOB - 最多存储255个字节 2. BLOB - 最多存储64KB(即65,535个字节) 3. MEDIUMBLOB - 最多存储约16MB(即16,777,215个字节) 4. LONGBLOB - 最大容量为约4GB(即4,294,967,295个字节) 根据实际需求,选择合适的BLOB类型可以避免数据截断的问题。例如,如果预计存储的图片大小不会超过64KB,则使用BLOB即可;但如果可能超出16MB,则应考虑MEDIUMBLOB或LONGBLOB。 接下来通过一个Java代码实例来演示如何在MySQL数据库中进行图片的读写操作:首先假设我们已有一个用于建立与MySQL连接的类DBConnection。以下是一个简单的Java程序,实现了将图片存储到数据库和从数据库提取图片的功能: ```java import java.io.*; import java.sql.*; public class LoadStoreBLOB { public static void main(String[] args) { DBConnection db = new DBConnection(); // 负责连接MySQL数据库的类实例化 Connection con = null; PreparedStatement ps = null; ResultSet rs = null; InputStream inStream = null; try { // 将图片保存到数据库 con = db.getConn(); inStream = new FileInputStream(sdf.png); ps = con.prepareStatement(INSERT INTO test.phototest VALUES (?, ?)); ps.setInt(1, 2); ps.setBinaryStream(2, inStream, inStream.available()); ps.executeUpdate(); in.close(); // 从数据库读取图片并保存到本地 con = db.getConn(); ps = con.prepareStatement(SELECT * FROM test.phototest WHERE id = ?); ps.setInt(1, 2); rs = ps.executeQuery(); rs.next(); // 将光标指向第一行 InputStream outStream = rs.getBinaryStream(photo); byte[] bArray = new byte[outStream.available()]; outStream.read(bArray); OutputStream fileOut = new FileOutputStream(222.jpg); fileOut.write(bArray); fileOut.flush(); fileOut.close(); db.closeConn(con); // 结束数据库连接 } catch (Exception e) { System.out.println(Error: + e.getMessage()); } } } ``` 在此示例中,我们创建了一个名为`LoadStoreBLOB`的类,并在其中实现了图片存取功能。存储时先打开一个文件输入流(FileInputStream),然后使用PreparedStatement的setBinaryStream方法将图像数据设置为SQL语句中的参数;读取时通过ResultSet的getBinaryStream方法获取图像数据,接着将其写入文件输出流(FileOutputStream)。 为了保证程序的安全性和效率,在实际开发中建议采用PreparedStatement预编译SQL语句以防止SQL注入攻击。同时处理流对象时要确保及时关闭它们,避免资源泄漏现象发生。 选择正确的BLOB类型至关重要,因为不恰当的选择可能导致数据截断异常。如果不确定图片的具体大小,则最好选用较大的LONGBLOB类型来存储以防万一。 总的来说,在使用Java和MySQL进行图像数据的存取操作时需要理解不同类型的BLOB以及如何利用输入输出流及数据库API读写二进制信息,这有助于我们构建高效的、可靠的程序功能。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • Java使MySQL
    优质
    本示例展示了如何在Java应用程序中利用MySQL数据库进行图片的数据存储与检索操作,提供详尽的源码解析。 在Java编程过程中,有时需要将图片这样的大容量二进制数据存储到数据库里。MySQL为此提供了BLOB(Binary Large Object)类型,专门用于处理大量二进制信息的存储需求。 我们首先来了解下MySQL中的BLOB类型:它是一个适用于存放大块二进制数据的数据字段类型,并不受字符集限制,适合于图像、音频或视频文件等类型的储存。在MySQL中存在四种不同大小的BLOB类型: 1. TINYBLOB - 最多存储255个字节 2. BLOB - 最多存储64KB(即65,535个字节) 3. MEDIUMBLOB - 最多存储约16MB(即16,777,215个字节) 4. LONGBLOB - 最大容量为约4GB(即4,294,967,295个字节) 根据实际需求,选择合适的BLOB类型可以避免数据截断的问题。例如,如果预计存储的图片大小不会超过64KB,则使用BLOB即可;但如果可能超出16MB,则应考虑MEDIUMBLOB或LONGBLOB。 接下来通过一个Java代码实例来演示如何在MySQL数据库中进行图片的读写操作:首先假设我们已有一个用于建立与MySQL连接的类DBConnection。以下是一个简单的Java程序,实现了将图片存储到数据库和从数据库提取图片的功能: ```java import java.io.*; import java.sql.*; public class LoadStoreBLOB { public static void main(String[] args) { DBConnection db = new DBConnection(); // 负责连接MySQL数据库的类实例化 Connection con = null; PreparedStatement ps = null; ResultSet rs = null; InputStream inStream = null; try { // 将图片保存到数据库 con = db.getConn(); inStream = new FileInputStream(sdf.png); ps = con.prepareStatement(INSERT INTO test.phototest VALUES (?, ?)); ps.setInt(1, 2); ps.setBinaryStream(2, inStream, inStream.available()); ps.executeUpdate(); in.close(); // 从数据库读取图片并保存到本地 con = db.getConn(); ps = con.prepareStatement(SELECT * FROM test.phototest WHERE id = ?); ps.setInt(1, 2); rs = ps.executeQuery(); rs.next(); // 将光标指向第一行 InputStream outStream = rs.getBinaryStream(photo); byte[] bArray = new byte[outStream.available()]; outStream.read(bArray); OutputStream fileOut = new FileOutputStream(222.jpg); fileOut.write(bArray); fileOut.flush(); fileOut.close(); db.closeConn(con); // 结束数据库连接 } catch (Exception e) { System.out.println(Error: + e.getMessage()); } } } ``` 在此示例中,我们创建了一个名为`LoadStoreBLOB`的类,并在其中实现了图片存取功能。存储时先打开一个文件输入流(FileInputStream),然后使用PreparedStatement的setBinaryStream方法将图像数据设置为SQL语句中的参数;读取时通过ResultSet的getBinaryStream方法获取图像数据,接着将其写入文件输出流(FileOutputStream)。 为了保证程序的安全性和效率,在实际开发中建议采用PreparedStatement预编译SQL语句以防止SQL注入攻击。同时处理流对象时要确保及时关闭它们,避免资源泄漏现象发生。 选择正确的BLOB类型至关重要,因为不恰当的选择可能导致数据截断异常。如果不确定图片的具体大小,则最好选用较大的LONGBLOB类型来存储以防万一。 总的来说,在使用Java和MySQL进行图像数据的存取操作时需要理解不同类型的BLOB以及如何利用输入输出流及数据库API读写二进制信息,这有助于我们构建高效的、可靠的程序功能。
  • C#SQLite
    优质
    本示例介绍如何在C#程序中使用SQLite数据库来存储和检索图片数据,涵盖从连接数据库到实际操作的完整过程。 这是一个C#.NET示例程序,简单演示了如何使用C#操作SQLite数据库,并展示了如何用C#将图片的二进制数据存储到数据库中以及从数据库读取图片的二进制数据并显示在PictureBox上。
  • 在VB.NET使Access数据库文件
    优质
    本教程详细介绍如何利用VB.NET编程语言结合Microsoft Access数据库来实现图片文件的数据存储与检索功能。适合希望将非文本数据整合进数据库管理系统的开发者参考学习。 在VB.NET中可以使用Access数据库来保存和读取图片文件,并将这些数据连接到DataGridView控件。
  • Java结合MySQL实现数据读取
    优质
    本示例展示了如何使用Java编程语言与MySQL数据库相结合,高效地将图片数据存入数据库,并演示了从数据库中检索这些图像文件的方法。此过程包括图片的数据处理、编码以及通过Java代码操作MySQL来完成图片的持久化存储和读取功能。 在Java和MySQL中处理图片数据的保存与读取是一项常见的任务,尤其在开发涉及用户上传图片功能的Web应用时。首先创建一个MySQL数据库表来存储图片信息。该表名为`photo`,包含三个字段:`id`(主键,自动递增),`name`(图片名称)以及`photo`(用于存储二进制数据的BLOB类型字段)。接下来编写一个工具类命名为ImageUtil,处理图片的二进制流。此工具类包括两个主要方法: 1. `getImageByte(String infile)`:该方法从本地文件读取图像的二进制流,并返回一个FileInputStream对象。 2. `readBlob(InputStream inputStream, String path)`:将输入流中的数据写入到指定路径,接收一个InputStream和输出文件路径作为参数。 在实际操作中,通常会先从数据库中读取图片数据至内存,然后将其保存为本地文件。为了实现这一过程,在`ImageInsert`类中展示了如何通过JDBC连接MySQL并将本地图片文件的二进制流存储到数据库中的方法。这包括建立数据库连接、编写SQL插入语句,并使用PreparedStatement执行该操作。 读取数据库中的图片数据时,同样需要先与数据库进行交互:使用PreparedStatement的executeQuery()方法获取结果集,然后从其中提取BLOB字段的数据并将其写入本地文件中。一旦获得二进制流,就可以利用ImageUtil.readBlob()将它保存为本地文件。 总结而言,在Java和MySQL处理图片数据的关键步骤包括: 1. 创建适合存储图像的数据库表结构,并使用BLOB类型来存放图片。 2. 编写工具类以处理图片的读取与输出操作。 3. 使用JDBC连接到MySQL,通过PreparedStatement执行保存和检索图片的操作。 4. 考虑性能优化以及错误预防措施,如在服务器端缓存部分数据、防止SQL注入等。 此实例提供了一个基础流程来存储和获取图像,但在实际项目中还需要考虑其他因素,例如安全性(避免SQL注入)、错误处理机制及用户体验的提升。
  • Java-BLOB与读取
    优质
    本示例详细介绍了如何在Java中将图片以BLOB形式存储到数据库,并从数据库中读取出BLOB数据并显示为图片。适合学习和参考。 2018年8月28日的开发工作提供了三种通过JDBC实现图片存储到BLOB的方式: 1. com.ztf模块:实现了小页面功能,支持指定保存的图片以及打开指定编号的图片。 2. com.ub模块:实现了简单的插入和读取操作。读取后的BLOB数据可以生成新的图片,并使用JFrame方式展示出来。 3. com.cc模块:由于需要更新两个不同库(测试代码中是同一个库内的两张表IMAGETAB和 IMAGETAB3)中的照片,而这些表里的照片字段类型为blob。直接通过查询结果进行update操作行不通,因此首先将图片从数据库导出到本地,再从本地获取数据执行更新操作;根据ImgID来进行update操作。此外,jdbc参数被放置在db.properties文件中(包含工具类)。WEB方式尚未实现,后期可以自行研究如何使用JS将前台上传的图片转换为Base64编码格式的字符串,并通过传参到Controller后进行解码处理后再存储到BLOB字段。 所需依赖Jar包:ojdbc6.jar。
  • MySQL项目:将在数据库
    优质
    本项目展示了如何使用MySQL数据库高效地存储和管理图片文件。通过实例代码解析了实现细节和技术要点。适合希望学习数据库高级应用的技术爱好者参考。 直接运行的演示项目实现了将图片保存在数据库的功能。
  • Java结合MongoDB实现与下载
    优质
    本示例展示了如何使用Java编程语言和MongoDB数据库技术进行图片文件的上传、存储及下载操作,旨在帮助开发者快速掌握相关技术的应用方法。 本段落主要介绍了如何使用Java与MongoDB来存储和下载图片,并通过实例详细讲解了相关操作技巧。对于需要实现此类功能的开发者来说,这是一份非常有价值的参考资料。
  • C# WinForm 使VLC显FFmpeg流媒体
    优质
    本项目提供了一个C# WinForm应用程序实例,展示如何集成VLC播放器以显示网络流媒体,并使用FFmpeg库将这些流媒体录制保存。 C# winform VLC 显示流媒体及ffmpeg 存储流媒体的示例代码可以用于演示如何在Windows窗体应用程序中使用VLC播放器显示网络视频流,并利用FFmpeg工具将这些流存储为文件。此demo展示了集成第三方库处理多媒体数据的基本方法,包括但不限于配置控件、设置参数以及执行必要的API调用以完成所需的功能操作。
  • MySQL方法.doc
    优质
    本文档探讨了在MySQL数据库中存储图片的不同方法,包括使用BLOB类型直接存图、将图片路径保存于数据库等策略,并分析其优劣。 MySQL使用的简单示例包括创建数据库表、插入数据以及查询操作。例如,可以使用SQL语句来定义一个包含用户ID、用户名和密码字段的表格,并向其中添加新的记录或检索特定用户的详细信息。此外,还可以执行更复杂的查询以筛选出满足某些条件的数据行或者对不同列进行汇总统计等任务。 这种数据库管理系统为开发人员提供了强大的工具集用于存储和管理大量数据,简化了应用程序中的数据处理流程并提高了效率。
  • 在SQL Server
    优质
    本文将介绍如何在SQL Server数据库中高效地存储图片,并探讨展示这些图像的不同方法。通过详细步骤和技术要点解析,帮助读者轻松掌握这一技能。 在SQL Server中存储并显示图片是一个常见的需求。这里提供一个实用的例子来帮助理解和实现这一功能。