java-mysql(3) 读写image

摘要:
try{fileInputStream=newFileInputStream(img);4importjava.io.fileInputStream;28try{29fileInputStream=newFileInputStream(img));4243preparedStatement=connection.prepareStatement(sql);

在mysql里面用来存储图片有一个特殊的数据对象叫做 Blob(Binary Large Object).

数据库里面插入一张图片:

第一步:需要为图片创建一个文件对象

File img = new File(proppath);
FileInputStream fileInputStream = null;
try {
       fileInputStream = new FileInputStream(img);
  } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
         e1.printStackTrace();
   }

第二部:创建二进制的数据流

preparedStatement.setBinaryStream(1, fileInputStream,
                    (int) img.length());
 preparedStatement.executeUpdate();

调用的是prepared statement的setBinaryStream对象:几个参数分别是需要绑定的参数索引位置,一个文件输入流,图片的字节数

java-mysql(3) 读写image第1张java-mysql(3) 读写image第2张
 1 package core;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.sql.Connection;
 7 import java.sql.DriverManager;
 8 import java.sql.PreparedStatement;
 9 import java.sql.SQLException;
10 import java.sql.Statement;
11 import java.sql.ResultSet;
12 
13 public class MethodReferencesTest {
14 
15     public static void main(String[] args) throws CloneNotSupportedException {
16         // TODO Auto-generated method stub
17 
18         Connection connection = null;
19         Statement statement = null;
20         ResultSet resultSet = null;
21         PreparedStatement preparedStatement = null;
22         String proppath = System.getProperty("user.dir")
23                 + "/src/core/c9c15f0edd07ee240f3af06de6775888.jpg";
24         
25         //创建image object
26         File img = new File(proppath);
27         FileInputStream fileInputStream = null;
28         try {
29             fileInputStream = new FileInputStream(img);
30         } catch (FileNotFoundException e1) {
31             // TODO Auto-generated catch block
32             e1.printStackTrace();
33         }
34         String sqlurl = "jdbc:mysql://172.20.23.75:3306/testdb";
35         String sqluser = "root";
36         String sqlpassword = "123456";
37         String sql = "INSERT INTO Images(Data) VALUES(?)";
38         
39         try {
40             connection = DriverManager.getConnection(sqlurl, sqluser,
41                     sqlpassword);
42             
43             preparedStatement = connection.prepareStatement(sql);
44             preparedStatement.setBinaryStream(1, fileInputStream,
45                     (int) img.length());
46             preparedStatement.executeUpdate();
47 
48         } catch (SQLException e) {
49             // TODO Auto-generated catch block
50             e.printStackTrace();
51         } finally {
52             try {
53                 if (resultSet != null) {
54                     resultSet.close();
55                 }
56                 if (statement != null) {
57                     statement.close();
58                 }
59                 if (preparedStatement != null) {
60                     preparedStatement.close();
61                 }
62                 if (connection != null) {
63                     connection.close();
64                 }
65             } catch (SQLException e) {
66                 e.printStackTrace();
67             }
68         }
69 
70     }
71 
72 }
点我看完整代码

 从数据库里面读取图片

第一步:创建一个输出流对象

//创建image object
File img = new File(proppath);
FileOutputStream fileputStream = null;
try {
    fileputStream = new FileOutputStream(img);
} catch (FileNotFoundException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

第二步:调用getblob()获取图片数据

 1 connection = DriverManager.getConnection(sqlurl, sqluser,
 2                     sqlpassword);
 3 
 4             preparedStatement = connection.prepareStatement(sql);
 5             resultSet = preparedStatement.executeQuery();
 6             if (resultSet.next()) {
 7                 // 获取图片数据
 8                 Blob blob = resultSet.getBlob("Data");
 9                 // 获取字节数
10                 int len = (int) blob.length();
11                 byte[] buf = blob.getBytes(1, len);
12                 try {
13                     fileputStream.write(buf, 0, len);
14                 } catch (IOException e) {
15                     // TODO Auto-generated catch block
16                     e.printStackTrace();
17                 }
18 
19             }

免责声明:文章转载自《java-mysql(3) 读写image》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Axure常用快捷键PHP对接口执行效率慢的优化下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

oracle中有关用户、角色的一些概念。

oracle中的每个用户对应一个单独的方案(schema),方案的名字与用户名一样,方案中包含很多数据对象,表,视图,触发器,存储过程等元素。 oracle中管理数据库的角色有sys,system,数据库的维护由数据库自己来完成,任何用户不得更改。 sys:所有oracle的数据字典的基表和视图都存放在sys用户中,   sys拥有dba,sysdba,s...

RequestBodyAdvice和ResponseBodyAdvice详解,@ControllerAdvice注解

一、源码解析 这是spring 4.2新加的两个接口 1、RequestBodyAdvice public interface RequestBodyAdvice { boolean supports(MethodParameter var1, Type var2, Class<? extends HttpMessageConverter&l...

union 中null值合并原理

正常情况下null<>null 的,但是在union中如果有两个null值,那么只会显示一个。 1.null<>null  下例中可以看出null<>null SQL>  select * from dual; DU--X SQL> select * from dual where null=null; 未选...

JMeter之BeanShell常用内置对象

 一、什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。...

滚动效果--marquee的使用

1. <marquee></marquee>标签,默认从最右侧往左滚动; 2. marquee 支持的属性    (1)behavior设置滚动方式: <marquee behavior="alternate">我是来回滚动</marquee><marquee behavior="scroll">...

WPF 使用用户控件UserControl来切换界面(二)

在上一篇文章中https://www.cnblogs.com/lizhiqiang0204/p/12367553.html我们使用按键Button来切换界面的,这次我们使用自定义的ItemsControl数据模板来切换页面。MainWindow.xaml如下 <Window.DataContext> <local:Mai...