总结了一下,这两天开发中的觉得有用的东西
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技术栈的宝贵材料,特别是结合了Struts、Spring、Hibernate这三个核心组件,以及Oracle数据库的设计和应用。 Struts、Spring和Hibernate,被称为SSH框架...
《J2EE项目开发与设计随书源码》是一份宝贵的学习资源,旨在帮助开发者深入理解和实践J2EE(Java 2 Platform, Enterprise Edition)技术。J2EE是Oracle公司推出的用于构建企业级分布式应用程序的平台,它为开发、...
通过具体的项目案例,深入分析Oracle在J2EE项目中的具体应用场景,包括需求分析、方案设计、开发实施、测试上线等各个环节的经验分享。 ### 结论 综上所述,达内教育机构推出的这份关于Oracle的J2EE教程涵盖了从...
Oracle数据库支持SQL标准,同时也提供了一系列高级特性,如PL/SQL编程语言、存储过程、触发器、索引、分区等,便于开发和管理复杂的数据存储和检索系统。 在提供的学习资料中,"J2EE 企业应用实战:Struts Spring ...
《基于Oracle数据库的图书管理系统》是一个专为J2EE初学者设计的学习项目,旨在帮助他们理解和实践Hibernate、Servlet、JSP以及MVC模式在实际开发中的应用。该项目提供了全面的详细设计信息,使得学习者可以逐步掌握...
在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是一个重要的企业级应用开发平台,它由Oracle...同时,对于毕业设计的学生,这样的实例能提供实际的项目经验,帮助他们更好地理解和应对实际工作中的挑战。
在J2EE项目中组建一个高效的开发团队是项目成功的关键因素之一。J2EE(Java 2 Platform, Enterprise Edition)是一种广泛使用的后端开发平台,它支持多层架构,允许分布式应用程序的开发。为了充分利用J2EE的优势并...
标题中的“J2EE项目代码全Java .NET”暗示了这是一个包含了使用Java和.NET技术开发的J2EE项目的集合。J2EE(Java Platform, Enterprise Edition)是Oracle公司提供的一个用于构建企业级分布式应用程序的平台,它支持...
通过对这些J2EE项目案例源代码的深入学习,开发者不仅可以提升自己的技术水平,还能积累宝贵的实践经验,更好地应对未来的项目挑战。无论是初学者还是经验丰富的开发者,都能从中受益匪浅,进一步增强自己在Java和...
【标题】"J2EE完整小项目(模拟新浪微博)"是一个基于J2EE技术栈的实践项目,旨在模拟微博社交平台的主要功能...通过这个项目,初学者可以深入理解J2EE开发流程,提升实际项目经验,为未来更复杂的系统开发打下坚实基础。
这个项目旨在帮助学生熟悉Java后端开发以及Oracle数据库的使用,提升在实际业务场景中的应用能力。 **1. Java技术栈** 在Java部分,主要使用的技术包括: - **Java SE**:作为基础平台,提供面向桌面应用的编程环境...
结合Oracle数据库和Java,本书可能还会讨论如何使用JDBC连接Oracle数据库,执行SQL语句,处理结果集,以及如何设计和实现数据持久化层。此外,可能会介绍Oracle的JDBC驱动,如Thin和OCI驱动,以及它们的适用场景。 ...
总结来说,这个压缩包文件提供了一个JSP和J2EE项目的学习资源,包括实际的代码练习,可以帮助Java开发者或学生提升在Web应用开发方面的能力。通过研究这个项目,你可以深入了解Java Web开发的流程,熟悉JSP、Servlet...
总的来说,J2EE OA项目开发是一个涵盖广泛技术领域和业务需求的复杂过程,需要开发者对Java、J2EE架构、数据库管理以及软件工程方法有深入理解和实践经验。通过这样的项目,不仅可以提升开发者的技术能力,也能让...
这些项目实例为开发者提供了实际操作经验,帮助他们掌握J2EE开发中的关键技术和最佳实践,包括MVC架构模式、数据库设计、用户认证与授权、事务管理、性能优化等。通过学习和分析这些源代码,开发者可以加深对J2EE的...
在J2EE项目中,JDBC常用于与数据库交互,实现数据的存储和检索。 5. **JNDI(Java Naming and Directory Interface)**:JNDI提供了一个接口,使得应用可以查找和绑定服务,如数据库连接池、邮件服务器等,增强了...
4. **数据库集成**:紧密集成了Oracle数据库,方便进行数据库相关的开发工作。 5. **多平台支持**:可以在Windows、Linux等多种操作系统上运行。 #### 三、使用Oracle ADF和JDeveloper开发Java EE应用的关键步骤 #...
总的来说,这个基于J2EE的OA源代码提供了全面的学习素材,无论是对初学者还是有经验的开发者,都能从中受益,加深对企业级应用开发的理解。通过分析和实践,我们可以提升自己的编程技能,更好地应对实际工作中遇到的...
总结以上知识点,我们可以看出这份简历内容全面,不仅涵盖了应聘者的技术技能和项目经验,还体现了其职业素养和求职意向。对于招聘方而言,这样的简历能够快速展现应聘者是否符合职位要求,有助于提高招聘效率和效果...
- Oracle数据库是J2EE项目中常用的数据库之一,这部分内容可以帮助开发者更好地使用Oracle。 19. **EJB教程** - 地址:http://www.ibeifeng.com/read.php?tid=1332&u=1007 - 专注于EJB技术的学习,EJB是J2EE的...