论坛首页 Java企业应用论坛

使用临时表时要注意

浏览 8606 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-02  
1:jdbc一定要加上事务控制,否则当多线程执行时,有可能使用的是同一个connection,那么在一个thread里创建的
临时表还没等被删除,另一个thread又要创建同名的临时表。这是就会报异常,说这个临时表已经存在了。
2:在同一个transaction里,不要使用同名的临时表,否则同样会报临时表已经存在了的异常,在同一个dao里,也许没有人会傻到
重复创建临时表,在dao中不同的方法里使用相同的临时表的名字也是危险的,如果这两个dao方法被同一个service方法调用,而这个service存在
又是使用spring来管理transaction,那么,实际上者两个dao方法使用的是同一个connection,如果两个dao方法里使用同名临时表,那么后调用的
dao方法就会报异常,说临时表已经存在。

经验总结:
1:事务一定要加上事务控制。
2:不供dao方法里的临时表名要不同。
这个是今天trouble shooting发现的问题。
   发表时间:2007-03-02  
Ivan Li 写道
1:jdbc一定要加上事务控制,否则当多线程执行时,有可能使用的是同一个connection,那么在一个thread里创建的
临时表还没等被删除,另一个thread又要创建同名的临时表。这是就会报异常,说这个临时表已经存在了。
2:在同一个transaction里,不要使用同名的临时表,否则同样会报临时表已经存在了的异常,在同一个dao里,也许没有人会傻到
重复创建临时表,在dao中不同的方法里使用相同的临时表的名字也是危险的,如果这两个dao方法被同一个service方法调用,而这个service存在
又是使用spring来管理transaction,那么,实际上者两个dao方法使用的是同一个connection,如果两个dao方法里使用同名临时表,那么后调用的
dao方法就会报异常,说临时表已经存在。

经验总结:
1:事务一定要加上事务控制。
2:不供dao方法里的临时表名要不同。
这个是今天trouble shooting发现的问题。


补充一点 storeprocedure里最好手动truncate临时表
0 请登录后投票
   发表时间:2007-03-02  
是drop临时表吧?truncate只是把数据清掉,临时表还在
0 请登录后投票
   发表时间:2007-03-02  
Ivan Li 写道
是drop临时表吧?truncate只是把数据清掉,临时表还在

drop当然更彻底一些.... 总之手动释放这些临时表资源是个好习惯
0 请登录后投票
   发表时间:2007-03-02  
我们一直使用procedure,没有碰到楼主说的问题,当然drop temp table 是个好习惯.
0 请登录后投票
   发表时间:2007-03-02  
我是说在jdbc里创建和删除临时表
0 请登录后投票
   发表时间:2007-03-05  
procedure比临时表更优美,java代码里还是少做些底层的代码好.写成配制文件都行.
0 请登录后投票
   发表时间:2007-03-08  
主要是Sybase不支持嵌套查询,只能用临时表。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics