设为首页 收藏本站
查看: 416|回复: 0

[经验分享] 使用oracle数据库的J2EE项目经验总结

[复制链接]
YunVN网友  发表于 2016-8-16 07:18:27 |阅读模式
总结了一下,这两天开发中的觉得有用的东西
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;
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-258415-1-1.html 上篇帖子: oracle中导出和导入部分blob,clob字段 下篇帖子: oracle报错信息之ORA-20000: ORU-10027
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表