`
rockjava
  • 浏览: 92058 次
  • 性别: Icon_minigender_1
  • 来自: 旮旯
社区版块
存档分类
最新评论

Spring JdbcTemplate 应用(三)

    博客分类:
  • Java
阅读更多

在这篇文章里介绍用JdbcTemplate进行数据库插入操作,包括对blob或clob字段的插入


还有对blob字段的取出操作。


1.使用JdbcTemplate往数据库里插入数据,其中包含blob字段。

public boolean doSubmitWeekly(final WeeklyVO weeklyVO)
			throws DataAccessException {
		StringBuffer sql = new StringBuffer();
		sql.append("INSERT INTO WEEKLY_INFO_T T (T.F_START_TIME, ");
		sql.append("                                 T.F_END_TIME, ");
		sql.append("                                 T.F_DATE, ");
		sql.append("                                 T.F_OWNER, ");
		sql.append("                                 T.F_ANNEX_NAME, ");
		sql.append("                                 T.F_ANNEX) ");
		sql.append("  VALUES   (TO_DATE (?, 'yyyy-mm-dd'), ");
		sql.append("            TO_DATE (?, 'yyyy-mm-dd'), ");
		sql.append("            TO_DATE (to_char(sysdate,'yyyy-mm-dd'), 'yyyy-mm-dd'), ");
		sql.append("            ?, ");
		sql.append("            ?, ");
		sql.append("            ?) ");//blob字段

		Boolean flag = new Boolean(false);

		try {
			flag = (Boolean) this.getJdbcTemplate().execute(sql.toString(),
					new MyPreparedStatementCallback(weeklyVO));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return flag.booleanValue();
	}




MyPreparedStatementCallback类的实现

/**
 * 上传附件回调操作类
 */
private class MyPreparedStatementCallback implements
		PreparedStatementCallback {

	private WeeklyVO weeklyVO;

	public MyPreparedStatementCallback(WeeklyVO weeklyVO) {
		this.weeklyVO = weeklyVO;
	}

	public Object doInPreparedStatement(PreparedStatement pstm)
			throws SQLException,
			org.springframework.dao.DataAccessException {

		pstm.setObject(1, this.weeklyVO.getStartTime());
		pstm.setObject(2, this.weeklyVO.getEndTime());
		pstm.setObject(3, this.weeklyVO.getOwner());
		pstm.setObject(4, this.weeklyVO.getAnnexName());
		try {
			// 操作Blob ---这里WeeklyVO类的annex属性是File类型
			pstm.setBinaryStream(5, new FileInputStream(this.weeklyVO
							.getAnnex()), (int) (this.weeklyVO.getAnnex()).length());
			// 操作Clob
			/**
			pstm.setCharacterStream(5, new FileReader(this.weeklyVO
							.getAnnex()), (int) (this.weeklyVO.getAnnex()).length());
			*/
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return new Boolean(false);
		}

		try {
			pstm.execute();
			return new Boolean(true);
		} catch (Exception e) {
			e.printStackTrace();
			return new Boolean(false);
		}
	}

}




2.使用JdbcTemplate读取数据库中的blob字段信息(把blob内容写到临时目录)

public Map doSelectWeekly(String weeklyId) throws DataAccessException {
		String sql = "select t.f_annex_name,t.f_annex from weekly_info_t t"
				+ " where t.f_weekly_id = " + weeklyId;
		Map map = new HashMap();
		map = (Map) this.getJdbcTemplate().execute(sql,
				new CallableStatementCallback() {

					public Object doInCallableStatement(CallableStatement stmt)
							throws SQLException,
							org.springframework.dao.DataAccessException {
						ResultSet rs = stmt.executeQuery();
						Map map = new HashMap();
						InputStream inputStream = null;
						String name = "";
						String path = System.getProperty("java.io.tmpdir")
								+ "/";
						File temp = new File(path);
						if (!temp.exists()) {
							temp.mkdir();
						}
						temp = null;

						while (rs.next()) {
							inputStream = rs.getBinaryStream("f_annex");// 读取blob

                    //Reader fileReader = rs.getCharacterStream("f_annex");// 读取clob
							name = rs.getString("f_annex_name");
							path += name;
							File fileOutput = new File(path);

							FileOutputStream fo;
							try {
								fo = new FileOutputStream(fileOutput);
								int readed;
								// 将附件写到临时目录里
								while ((readed = inputStream.read()) != -1) {
									fo.write(readed);
								}
								fo.close();
							} catch (FileNotFoundException e) {
								e.printStackTrace();
							} catch (IOException e) {
								e.printStackTrace();
							}
						}
						map.put("annexName", name);
						map.put("filePath", path);
						return map;//返回文件名称和文件所在路径,供页面下载用。
					}

				});
		return map;
	}




附:下载blob内容代码片段(先把blob内容写到临时目录在从临时目录下载)

Map map = weeklyServise.doSelectWeekly("52");//参数为附件ID
String annexName = (String) map.get("annexName");
String path = (String) map.get("filePath");

BufferedInputStream bis = null;
BufferedOutputStream bos = null;
OutputStream fos = null;
InputStream fis = null;

String filepath = path;
System.out.println("文件路径" + filepath);
java.io.File uploadFile = new java.io.File(filepath);
//从低级流构造成高级流
fis = new FileInputStream(uploadFile);
bis = new BufferedInputStream(fis);
fos = response.getOutputStream();
bos = new BufferedOutputStream(fos);
//设置下载文件名
response.setHeader("Content-disposition", "attachment;filename="
		+ URLEncoder.encode(annexName, "utf-8"));
int bytesRead = 0;
byte[] buffer = new byte[4096];
while ((bytesRead = bis.read(buffer, 0, 4096)) != -1) {
	bos.write(buffer, 0, bytesRead);//开始下载数据
}
bos.flush();
fis.close();
bis.close();
fos.close();
bos.close();
java.io.File temp = new java.io.File(System.getProperty("java.io.tmpdir")+"/");
if(temp.isDirectory()){
	FileUtils.deleteDirectory(temp);//删除临时文件夹
}
return null;


 

分享到:
评论
1 楼 yiwanxinyuefml 2013-12-30  

谢谢分享,很有帮助

相关推荐

    基于注解的Spring JdbcTemplate

    在Java世界中,Spring框架是企业级应用开发的首选。Spring JDBC模絫提供了一种简洁的方式来处理数据库操作,而`Spring JdbcTemplate`是这个模絫的核心组件。本教程将深入探讨如何使用基于注解的Spring JdbcTemplate...

    spring-jdbcTemplate实例工程

    三、Spring JdbcTemplate基本用法 - **配置JdbcTemplate**:首先,需要在Spring配置文件中声明一个JdbcTemplate bean,并注入DataSource。 - **执行SQL**:调用JdbcTemplate的execute()方法执行SQL,对于查询操作...

    Spring JdbcTemplate

    这样,整个应用就可以通过Spring的依赖注入机制来获取并使用JdbcTemplate实例。 例如,一个简单的`applicationContext.xml`配置片段可能如下: ```xml <bean id="dataSource" class="org.springframework.jdbc....

    Spring JDBCTemplate连接池jar包

    首先,我们要理解Spring JDBCTemplate的工作原理。它作为一个模板类,提供了执行SQL语句的方法,如`update()`, `query()`, `insert()`, `delete()`等。开发者只需要提供SQL语句和参数绑定,JDBCTemplate会自动处理...

    Spring JdbcTemplate 常用方法整理

    本文将深入探讨Spring JdbcTemplate的常用方法,并结合提供的`JsonBean.java`和`JdbcUtils.java`文件,来理解其在实际应用中的使用。 首先,JdbcTemplate的核心功能在于它提供了一系列的方法来执行SQL语句,包括...

    strut2+spring+springjdbctemplate做的简易登录系统

    Struts2、Spring和Spring JDBC Template是Java Web开发中常用的三个框架,它们分别负责不同的职责。Struts2作为MVC(Model-View-Controller)框架,主要处理前端请求和业务逻辑;Spring则是一个全面的后端框架,提供...

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    使用 Spring JdbcTemplate 调用 Oracle 存储过程实现 CRUD 在本文中,我们将讨论如何使用 Spring JdbcTemplate 调用 Oracle 存储过程来实现 CRUD(Create、Read、Update、Delete)操作。我们将首先编写 Oracle 存储...

    Spring JdbcTemplate查询实例

    在本实例中,我们将深入探讨Spring JdbcTemplate的查询功能及其在实际应用中的使用。 首先,Spring JdbcTemplate通过提供一系列的模板方法,如`queryForList`、`queryForObject`、`execute`等,使得执行SQL查询变得...

    Spring JdbcTemplate例子

    总的来说,Spring JdbcTemplate是一个强大且灵活的工具,适用于需要直接执行SQL的简单应用,或是作为更复杂数据访问策略的基础。它降低了数据库操作的复杂度,让开发者能更加专注于业务逻辑的实现。结合Spring框架的...

    使用Spring JDBCTemplate进行增删改查curd操作

    在Spring框架中,JdbcTemplate是用于简化数据库操作的重要工具,它是Spring JDBC模块的一部分。通过使用JdbcTemplate,开发者可以...通过熟练掌握JdbcTemplate的使用,开发者可以更高效地构建与数据库交互的Java应用。

    Spring JdbcTemplate api

    在`JdbcTemplate`的设计中,模板(Template)承担着事物控制、资源管理和异常处理的责任,而回调(Callback)则专注于实现应用程序特有的逻辑,如创建SQL语句、设置参数和处理结果集。这种分离使得开发者能够更专注...

    Spring JdbcTemplate.batchUpdate 例子

    在Spring框架中,`JdbcTemplate`是用于简化Java数据库连接(JDBC)操作的一个核心组件。这个类提供了很多方法来执行SQL查询、更新语句,包括批处理操作。本篇文章将详细探讨`batchUpdate`方法及其在实际开发中的应用...

    spring的jdbcTemplate小案例

    2. **创建JdbcTemplate Bean**:接下来,我们需要创建一个JdbcTemplate的实例,并将其注入到我们的应用中。这通常在Spring配置文件中完成,通过`@Bean`注解创建一个JdbcTemplate实例,并将DataSource注入其中。 ```...

    Spring 学习 JdbcTemplate,模板模式,回调

    在IT行业中,Spring框架是Java开发中的核心工具之一,它为构建企业级应用提供了全面的解决方案。本主题将深入探讨Spring框架中的JdbcTemplate组件,以及模板模式和回调机制的概念。 **1. Spring JdbcTemplate** ...

    spring jdbcTemplate

    《Spring JdbcTemplate 深入解析与实战应用》 在Java世界中,Spring框架以其强大的功能和灵活性,深受广大开发者的喜爱。其中,Spring JDBC Template是Spring提供的一个用于简化数据库操作的工具,它抽象了JDBC API...

    spring jdbcTemplate 注入到servlet

    在Spring应用中,`JdbcTemplate`通常作为依赖项注入到需要执行数据库操作的组件中,比如Servlet。为了在Servlet中注入`JdbcTemplate`,我们需要以下步骤: 1. **配置数据源**:在Spring的配置文件(如`...

    SSH笔记-Spring JdbcTemplate

    Spring是一个广泛应用的Java企业级应用框架,它提供了多种数据访问工具,而JdbcTemplate就是其中之一,用于简化JDBC(Java Database Connectivity)操作,提高代码的可读性和可维护性。 在Spring4版本中,...

    spring jdbctemplate实例

    对于性能要求较高的互联网应用,JdbcTemplate的这些特性使其成为理想的选择。 通过运行"testTemplateJdbc"这个实例,你可以亲身体验Spring JdbcTemplate的使用,并进一步理解其工作原理和优势。在实践中不断探索,...

    4.Spring中的JdbcTemplate,Spring中的的事务,

    ### Spring中的JdbcTemplate #### JdbcTemplate概述 JdbcTemplate是Spring框架提供的一种用于简化JDBC编程的对象。通过封装原生的JDBC API,JdbcTemplate不仅...这些技能对于开发基于Spring框架的应用程序至关重要。

Global site tag (gtag.js) - Google Analytics