以下示例将演示使用spring jdbc更新BLOB类型的字段值,即更新student表中的可用记录。

student表的结构如下 -

  1. CREATE TABLE student(
  2. ID INT NOT NULL AUTO_INCREMENT,
  3. NAME VARCHAR(20) NOT NULL,
  4. AGE INT NOT NULL,
  5. IMAGE BLOB,
  6. PRIMARY KEY (ID)
  7. );
  8. INSERT INTO student(ID,NAME,AGE,IMAGE) VALUES(1,'Maxsu', 23, NULL);
SQL

语法:

  1. MapSqlParameterSource in = new MapSqlParameterSource();
  2. in.addValue("id", id);
  3. in.addValue("image", new SqlLobValue(new ByteArrayInputStream(imageData),
  4. imageData.length, new DefaultLobHandler()), Types.BLOB);
  5. String SQL = "update Student set image = :image where id = :id";
  6. NamedParameterJdbcTemplate jdbcTemplateObject = new NamedParameterJdbcTemplate(dataSource);
  7. jdbcTemplateObject.update(SQL, in);
Java

在上面语法中 -

  • SqlLobValue - 表示SQL BLOB / CLOB值参数的对象。
  • in - SqlParameterSource对象将参数传递给更新查询。
  • jdbcTemplateObject - NamedParameterJdbcTemplate对象来更新数据库中的学生对象。

创建项目

要了解上面提到的Spring JDBC相关的概念,这里创建一个项目用来演示如何操作BLOB类型字段。打开Eclipse IDE,并按照以下步骤创建一个名称为:HandlingBLOB 的Spring应用程序项目。

步骤说明

  1. 参考第一个Spring JDBC项目来创建一个Maven项目 - http://www.yiibai.com/springjdbc/first_application.html
  2. 更新bean配置并运行应用程序。

完整的项目结构如下所示 -

文件 : pom.xml 的内容 -

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.yiibai</groupId>
  5. <artifactId>HandlingBLOB</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>jar</packaging>
  8. <name>HandlingBLOB</name>
  9. <url>http://maven.apache.org</url>
  10. <dependencies>
  11. <dependency>
  12. <groupId>junit</groupId>
  13. <artifactId>junit</artifactId>
  14. <version>3.8.1</version>
  15. <scope>test</scope>
  16. </dependency>
  17. <dependency>
  18. <groupId>mysql</groupId>
  19. <artifactId>mysql-connector-java</artifactId>
  20. <version>5.1.40</version>
  21. </dependency>
  22. <dependency>
  23. <groupId>org.springframework</groupId>
  24. <artifactId>spring-jdbc</artifactId>
  25. <version>4.1.0.RELEASE</version>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework</groupId>
  29. <artifactId>spring-context</artifactId>
  30. <version>4.1.4.RELEASE</version>
  31. </dependency>
  32. </dependencies>
  33. </project>

以下是数据访问对象接口文件:StudentDAO.java的代码内容:

  1. package com.yiibai;
  2. import java.util.List;
  3. import javax.sql.DataSource;
  4. public interface StudentDAO {
  5. /**
  6. * This is the method to be used to initialize database resources ie.
  7. * connection.
  8. */
  9. public void setDataSource(DataSource ds);
  10. /**
  11. * This is the method to be used to update a record into the Student table.
  12. */
  13. public void updateImage(Integer id, byte[] imageData);
  14. }
Java

以下是文件:Student.java的代码内容:

  1. package com.yiibai;
  2. public class Student {
  3. private Integer age;
  4. private String name;
  5. private Integer id;
  6. private byte[] image;
  7. public void setAge(Integer age) {
  8. this.age = age;
  9. }
  10. public Integer getAge() {
  11. return age;
  12. }
  13. public void setName(String name) {
  14. this.name = name;
  15. }
  16. public String getName() {
  17. return name;
  18. }
  19. public void setId(Integer id) {
  20. this.id = id;
  21. }
  22. public Integer getId() {
  23. return id;
  24. }
  25. public byte[] getImage() {
  26. return image;
  27. }
  28. public void setImage(byte[] image) {
  29. this.image = image;
  30. }
  31. }
Java

以下是文件:StudentMapper.java的代码内容:

  1. package com.yiibai;
  2. import java.sql.ResultSet;
  3. import java.sql.SQLException;
  4. import org.springframework.jdbc.core.RowMapper;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import org.springframework.jdbc.core.RowMapper;
  8. public class StudentMapper implements RowMapper<Student> {
  9. public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
  10. Student student = new Student();
  11. student.setId(rs.getInt("id"));
  12. student.setName(rs.getString("name"));
  13. student.setAge(rs.getInt("age"));
  14. student.setImage(rs.getBytes("image"));
  15. return student;
  16. }
  17. }
Java

以下是实现类文件:StudentJDBCTemplate.java,它实现了接口StudentDAO.java
以下是文件:StudentJDBCTemplate.java的代码内容:

  1. package com.yiibai;
  2. import java.util.List;
  3. import javax.sql.DataSource;
  4. import org.springframework.jdbc.core.JdbcTemplate;
  5. import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
  6. import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
  7. import org.springframework.jdbc.core.namedparam.SqlParameterSource;
  8. import org.springframework.jdbc.core.simple.SimpleJdbcCall;
  9. import org.springframework.jdbc.core.support.SqlLobValue;
  10. import org.springframework.jdbc.support.lob.DefaultLobHandler;
  11. import java.io.ByteArrayInputStream;
  12. import java.sql.Types;
  13. public class StudentJDBCTemplate implements StudentDAO {
  14. private DataSource dataSource;
  15. private JdbcTemplate jdbcTemplateObject;
  16. public void setDataSource(DataSource dataSource) {
  17. this.dataSource = dataSource;
  18. }
  19. public void updateImage(Integer id, byte[] imageData) {
  20. MapSqlParameterSource in = new MapSqlParameterSource();
  21. in.addValue("id", id);
  22. in.addValue("image", new SqlLobValue(new ByteArrayInputStream(imageData),
  23. imageData.length, new DefaultLobHandler()), Types.BLOB);
  24. String SQL = "update Student set image = :image where id = :id";
  25. NamedParameterJdbcTemplate jdbcTemplateObject = new NamedParameterJdbcTemplate(dataSource);
  26. jdbcTemplateObject.update(SQL, in);
  27. System.out.println("Updated Record with ID = " + id );
  28. }
  29. }
Java

以下是程序执行入口文件:MainApp.java的代码内容:

  1. package com.yiibai;
  2. import org.springframework.context.ApplicationContext;
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;
  4. import com.yiibai.StudentJDBCTemplate;
  5. public class MainApp {
  6. public static void main(String[] args) {
  7. ApplicationContext context = new ClassPathXmlApplicationContext("application-beans.xml");
  8. StudentJDBCTemplate studentJDBCTemplate = (StudentJDBCTemplate) context.getBean("studentJDBCTemplate");
  9. byte[] imageData = { 0, 1, 0, 8, 20, 40, 95 };
  10. studentJDBCTemplate.updateImage(1, imageData);
  11. }
  12. }
Java

以下是Bean和数据库配置文件:application-beans.xml的代码内容:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd ">
  6. <!-- Initialization for data source -->
  7. <bean id="dataSource"
  8. class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  9. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  10. <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=true" />
  11. <property name="username" value="root" />
  12. <property name="password" value="123456" />
  13. </bean>
  14. <!-- Definition for studentJDBCTemplate bean -->
  15. <bean id="studentJDBCTemplate" class="com.yiibai.StudentJDBCTemplate">
  16. <property name="dataSource" ref="dataSource" />
  17. </bean>
  18. </beans>
XML

注意: application-beans.xml 文件的位置是:{workspace}/fistapp/src/main/java 目录,如果放置错了,程序可能会因为找不到此配置文件而出错。

完成创建源代码和bean和数据库连接信息的文件配置后,运行应用程序。这里先简单说明一下运行的步骤,在项目名称(HandlingBLOB)上点击右键,在弹出的菜单中选择:【Run As】-> 【Maven test】

在运行测试成功后,应该会输出类似以下内容(含有 BUILD SUCCESS 的信息) 。
接下来,点击类文件:MainApp.java 选择【Run As】->【Java Application】,如果应用程序一切正常,这将打印以下消息:

  1. Updated Record with ID = 1

Spring JDBC处理BLOB类型字段的更多相关文章

  1. Spring JDBC处理CLOB类型字段

    以下示例将演示使用spring jdbc更新CLOB类型的字段值,即更新student表中的可用记录. student表的结构如下 - CREATE TABLE student( ID INT NOT ...

  2. 【JDBC核心】操作 BLOB 类型字段

    操作 BLOB 类型字段 MySQL BLOB 类型 MySQL 中,BLOB 是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据. 插入 BLOB 类型的数据必须使用 Pre ...

  3. mybatis oracle BLOB类型字段保存与读取

    一.BLOB字段 BLOB是指二进制大对象也就是英文Binary Large Object的所写,而CLOB是指大字符对象也就是英文Character Large Object的所写.其中BLOB是用 ...

  4. Oracle中,如何将String插入到BLOB类型字段

    1,String插入到BLOB类型字段,(这里的字符串以生成的XML为例): String XML = document.asXML();  //使用dom4j写成的xml是String类型,记得st ...

  5. oracle中如何判断blob类型字段是否为空

    eg.假如有表T_GA_GRJBXX  ,字段zp是blob类型 查询blob非空的记录 SELECT * FROM u_rs_sjgx.T_GA_GRJBXX TB WHERE TB.zp IS n ...

  6. PDM->OOM->C#实体类生成时,对Blob类型字段的处理

    pdm中的Blob字段生成OOM时,自动变成了string类型,再生成实体类时也是string 如何将oom中对应的blob字段设置为Byte[]类型,目前没找到方法, 只能通过脚本,将生成后的OOM ...

  7. (转载)VB 查询Oracle中blob类型字段,并且把blob中的图片以流的方式显示在Image上

    原文摘自:http://heisetoufa.iteye.com/blog/ '模块代码 Private Declare Function CreateStreamOnHGlobal Lib &quo ...

  8. jdbc获取blob类型乱码

    一.使用场景: mysql数据库字段类型为longblob,在数据库里看中文字符正常,java读取字串的时候发现中文乱码 使用到了activeMq 二.排查: (1)修改eclipse的环境编码为ut ...

  9. oracle 11g r2 blob类型getString报错问题

    摘要: 问题: 在hibernate中实体类中blob类型字段为 private String textBlob; 查询时报错: java.sql.SQLException: 无效的列类型: getS ...

随机推荐

  1. SQL 中 replace 替换字符串中的字符 ''

    update CfmRcd set reconsource=replace(reconsource,'''',''), cmffile =replace(cmffile,'''',''), cfmda ...

  2. MVC的项目部署成应用程序或虚拟目录路径的问题

    1.js和css的引用出错 a.~/可以取得应用程序目录 b. ./定位到路径,./代表到本目录,../代表父级目录 2.打开页面view a. ./定位到路径 3.img src   a. ./定位 ...

  3. DIOCP开源项目-数据库连接池的使用<多帐套数据库>

    很久没有写DIOCP的Demo了,主要公司的事情太繁琐,工作之余都不想动了,之前承若的群里面朋友们的DEMO,昨天晚上恶补了一下,把对数据库连接池的操作加入到了Demo中,大家可以通过SVN下载到最新 ...

  4. HTTP Basic Authentication认证

    http://smalltalllong.iteye.com/blog/912046 ******************************************** 什么是HTTP Basi ...

  5. eclipse jetty 请求的操作无法在使用用户映射区域打开的文件上执行

    使用jetty  debug代码启动  在eclipse中进行运行调试,碰到无法编辑保存webapp下的文件 提示: 请求的操作无法在使用用户映射区域打开的文件上执行 解决方法: 从 jetty 7 ...

  6. JAVA-JSP内置对象之response对象实现页面跳转

    相关资料:<21天学通Java Web开发> response对象 实现页面跳转1.可以通过response对象的sendRedirect()方法设置页面重定向,从而实现页面跳转.2.这种 ...

  7. win7+python3.6+word_cloud 安装出现Microsoft Visual C++ 14.0 is required

    说明 环境: 已安装Anaconda3 (64-bit) 4.4.0(Python 3.6.1).其中,代码调试在Spyder 3.1.4中进行,安装包则直接打开Anaconda Prompt调用cm ...

  8. Linux 下 less 命令

    less 命令功能强大,上能搜索,下能动态加载查看日志,并且每一屏内容都是预加载,不会加载整个文件,所以不会由于搜索内容过多把机器卡死 语法 less [参数] 文件地址 参数说明 -N:显示行号 f ...

  9. 【Unity】使用JSONObject解析Json

    为何要用JSONObject 之前已经用过JsonUtility和Newton.Json来解析Json了,为什么现在又要用一个新的JSONObject来解析Json? 使用JsonUtility:ht ...

  10. python抓取今日头条

    # 直接上代码,抓取关键词搜索结果的json数据# coding:utf-8 import requests import json url = 'http://www.toutiao.com/sea ...