`

使用oracle数据库的J2EE项目经验总结

阅读更多
总结了一下,这两天开发中的觉得有用的东西

1. Oracle中的sequence

我有两个表,一个是物资表,其主键是数据库自增序列,另一个表是物资明细表,其主键也是自增序列,物资表的主键是此表的外键。现在我有一个插入的操作,需要现在物资表里插入一条数据(id插入使用s_id.nextval,s_id表示序列),然后在物资明细表中也对应的插入数据。然后,问题产生了,当我需要插入物资明细表的时候由于不知道物资表的id是多少,导致没法进行操作。据了解,如果使用了hibernate的话,能够直接配置好了拿到此id,可是我们的项目只用了struts+sping。

别人给的解决方案:

(1) 将这两个表的操作放到一个事务中去做,物资表插入完之后,直接查找该表拿到最后一个插入的id进行操作。

(2) 使用s_id的nextval和currval操作,由于每次使用currval的时候必须是先进行过nextval操作,如果插入之后使用查询currval取值,这样取到的值肯定是正确的,不用考虑是否有别人同时也对此表进行操作,导致取出的值不一样,这个方法我尝试了,但由于在一个方法中要两次执行sql语句,觉得太麻烦。

(3) 最后我才明白了sequence是怎么回事,在数据库中sequences和表是独立的,如果在设计数据库表的时候,比如id字段不让它绑定序列值,这样序列就是自己增加,和id没关系。所以解决方法就是,在插入数据库表的时候首先使用sql语句:

"select s_id.nextval from dual"拿到唯一的id,然后使用这个id进行插入操作。以前很纠结是因为总以为只要没有插入操作,nextval是从数据库表中具体数据的下一条开始的,真是无知啊。

2. Oracle中的dual表是什么东西

因为发现在数据库中没有存在dual表,却可以进行操作,原来dual是oracle数据库的虚表,是Oracle与数据字典一起自动创建的一个表,只有一行一列,返回值只有一条数据,即使进行的是多条数据的操作,这样像调用系统时间select to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss') from dual之类的都可以使用,真是简便。

3. 在J2EE项目中对数据库中的BLOB类型数据的读取

(1)sping中的配置
<bean id="defaultLobHandler"
   class="org.springframework.jdbc.support.lob.DefaultLobHandler"
   lazy-init="true" />


(2) 在DAOImpl中添加资源及对应的setter getter
  @Resource
   private LobHandler lobHandler;

(3)  对于插入数据库方法add(),使用jdbcTemplate的时候请使用lobCreator,例子如下:
jdbcTemplate.execute(sql,new AbstractLobCreatingPreparedStatementCallback(this.lobHandler)  
   { protected void setValues(PreparedStatement ps,LobCreator lobCreator) 
          throws SQLException 
     {
	  ps.setString(1, bean.getDeviationReportNumber());
	  ps.setString(2, bean.getMaterialsName());
	  lobCreator.setBlobAsBytes(ps, 3, bean.getDeviationReportAttachment());
						
     }
					
   });

(4)  对于读取数据库方法,使用jdbcTemplate时请使用lobHandler.getBlobAsBytes,例子如下:
jdbcTemplate.query(sql, new AbstractLobStreamingResultSetExtractor() {
	protected void streamData(ResultSet rs) throws SQLException,IOException 
		{
			reportBean.setId(rs.getLong("ID"));				
			reportBean.setDeviationReportAttachment(lobHandler
						.getBlobAsBytes(rs, 9));
			}
		}, params);

4.InputStream与byte[]转换
private byte[] InputStreamToByte(InputStream is) throws IOException {
   ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
   int ch;
   while ((ch = is.read()) != -1) {
    bytestream.write(ch);
   }
   byte imgdata[] = bytestream.toByteArray();
   bytestream.close();
   return imgdata;
  }


5.使用struts2实现文件上传与下载

(1)文件的上传是在jsp页面中使用<s:file />即可生成一个“浏览”按钮,在写一个 在action中对文件进行处理。
(2)文件下载
在struts.xml中配置如下:
<action name="download" class="com.cnpc.action.MaterialReceiveAction" >
			<result name="success" type="stream">
				<param name="contentType">application/msword</param>
				<param name="inputName">inputStream</param>
				<param name="contentDisposition">attachment;filename="${exportFilename}"</param>
				<param name="bufferSize">4096</param>
			</result>
		</action>	

在action中写:
/**
	 * 获取下载文件名 中文名
	 * @return
	 */
	public String getExportFilename() 
	{
		try {
			return new String(this.exportFilename.getBytes(), "ISO8859-1");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			return "default";
		}
	}
	public void setExportFilename(String exportFilename) {
		this.exportFilename = exportFilename;
	}






分享到:
评论

相关推荐

    基于J2EE的两个项目源码(含数据库设计)

    本资源包含的“基于J2EE的两个项目源码”,是学习和理解J2EE技术栈的宝贵材料,特别是结合了Struts、Spring、Hibernate这三个核心组件,以及Oracle数据库的设计和应用。 Struts、Spring和Hibernate,被称为SSH框架...

    J2EE项目开发与设计随书源码

    《J2EE项目开发与设计随书源码》是一份宝贵的学习资源,旨在帮助开发者深入理解和实践J2EE(Java 2 Platform, Enterprise Edition)技术。J2EE是Oracle公司推出的用于构建企业级分布式应用程序的平台,它为开发、...

    达内j2ee教程之 oracle29

    通过具体的项目案例,深入分析Oracle在J2EE项目中的具体应用场景,包括需求分析、方案设计、开发实施、测试上线等各个环节的经验分享。 ### 结论 综上所述,达内教育机构推出的这份关于Oracle的J2EE教程涵盖了从...

    Java、J2EE、Oracle学习资料

    Oracle数据库支持SQL标准,同时也提供了一系列高级特性,如PL/SQL编程语言、存储过程、触发器、索引、分区等,便于开发和管理复杂的数据存储和检索系统。 在提供的学习资料中,"J2EE 企业应用实战:Struts Spring ...

    基于Oracle数据库的图书管理系统

    《基于Oracle数据库的图书管理系统》是一个专为J2EE初学者设计的学习项目,旨在帮助他们理解和实践Hibernate、Servlet、JSP以及MVC模式在实际开发中的应用。该项目提供了全面的详细设计信息,使得学习者可以逐步掌握...

    J2EE专业项目实例源码

    在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是一个重要的企业级应用开发平台,它由Oracle...同时,对于毕业设计的学生,这样的实例能提供实际的项目经验,帮助他们更好地理解和应对实际工作中的挑战。

    J2EE项目中如何组建开发团队

    在J2EE项目中组建一个高效的开发团队是项目成功的关键因素之一。J2EE(Java 2 Platform, Enterprise Edition)是一种广泛使用的后端开发平台,它支持多层架构,允许分布式应用程序的开发。为了充分利用J2EE的优势并...

    J2EE项目代码全Java .NET

    标题中的“J2EE项目代码全Java .NET”暗示了这是一个包含了使用Java和.NET技术开发的J2EE项目的集合。J2EE(Java Platform, Enterprise Edition)是Oracle公司提供的一个用于构建企业级分布式应用程序的平台,它支持...

    J2EE项目案例源代码(强力推荐:运行稳定)

    通过对这些J2EE项目案例源代码的深入学习,开发者不仅可以提升自己的技术水平,还能积累宝贵的实践经验,更好地应对未来的项目挑战。无论是初学者还是经验丰富的开发者,都能从中受益匪浅,进一步增强自己在Java和...

    J2EE完整小项目(模拟新浪微博)

    【标题】"J2EE完整小项目(模拟新浪微博)"是一个基于J2EE技术栈的实践项目,旨在模拟微博社交平台的主要功能...通过这个项目,初学者可以深入理解J2EE开发流程,提升实际项目经验,为未来更复杂的系统开发打下坚实基础。

    数据库课程设计(学员管理系统Java和oracle)

    这个项目旨在帮助学生熟悉Java后端开发以及Oracle数据库的使用,提升在实际业务场景中的应用能力。 **1. Java技术栈** 在Java部分,主要使用的技术包括: - **Java SE**:作为基础平台,提供面向桌面应用的编程环境...

    Oracle和Java开发书籍

    结合Oracle数据库和Java,本书可能还会讨论如何使用JDBC连接Oracle数据库,执行SQL语句,处理结果集,以及如何设计和实现数据持久化层。此外,可能会介绍Oracle的JDBC驱动,如Thin和OCI驱动,以及它们的适用场景。 ...

    JSP项目 J2EE项目、Java学习资料 练习的代码

    总结来说,这个压缩包文件提供了一个JSP和J2EE项目的学习资源,包括实际的代码练习,可以帮助Java开发者或学生提升在Web应用开发方面的能力。通过研究这个项目,你可以深入了解Java Web开发的流程,熟悉JSP、Servlet...

    J2EE OA 项目开发日记简介

    总的来说,J2EE OA项目开发是一个涵盖广泛技术领域和业务需求的复杂过程,需要开发者对Java、J2EE架构、数据库管理以及软件工程方法有深入理解和实践经验。通过这样的项目,不仅可以提升开发者的技术能力,也能让...

    《j2ee专业项目实例开发》源代码

    这些项目实例为开发者提供了实际操作经验,帮助他们掌握J2EE开发中的关键技术和最佳实践,包括MVC架构模式、数据库设计、用户认证与授权、事务管理、性能优化等。通过学习和分析这些源代码,开发者可以加深对J2EE的...

    J2EE专业项目实例开发

    在J2EE项目中,JDBC常用于与数据库交互,实现数据的存储和检索。 5. **JNDI(Java Naming and Directory Interface)**:JNDI提供了一个接口,使得应用可以查找和绑定服务,如数据库连接池、邮件服务器等,增强了...

    oracle adf JDeveloper 教程 java j2ee

    4. **数据库集成**:紧密集成了Oracle数据库,方便进行数据库相关的开发工作。 5. **多平台支持**:可以在Windows、Linux等多种操作系统上运行。 #### 三、使用Oracle ADF和JDeveloper开发Java EE应用的关键步骤 #...

    推荐很不错的基于J2EE的OA源代码内涵数据库

    总的来说,这个基于J2EE的OA源代码提供了全面的学习素材,无论是对初学者还是有经验的开发者,都能从中受益,加深对企业级应用开发的理解。通过分析和实践,我们可以提升自己的编程技能,更好地应对实际工作中遇到的...

    j2ee个人简历(高级工程师高新)模板

    总结以上知识点,我们可以看出这份简历内容全面,不仅涵盖了应聘者的技术技能和项目经验,还体现了其职业素养和求职意向。对于招聘方而言,这样的简历能够快速展现应聘者是否符合职位要求,有助于提高招聘效率和效果...

    一些j2ee学习资料

    - Oracle数据库是J2EE项目中常用的数据库之一,这部分内容可以帮助开发者更好地使用Oracle。 19. **EJB教程** - 地址:http://www.ibeifeng.com/read.php?tid=1332&u=1007 - 专注于EJB技术的学习,EJB是J2EE的...

Global site tag (gtag.js) - Google Analytics