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

经验总结:
1:事务一定要加上事务控制。
2:不供dao方法里的临时表名要不同。
这个是今天trouble shooting发现的问题。
评论
Ivan Li 2007-03-08   回复
主要是Sybase不支持嵌套查询,只能用临时表。
shaucle 2007-03-05   回复
procedure比临时表更优美,java代码里还是少做些底层的代码好.写成配制文件都行.
Ivan Li 2007-03-02   回复
我是说在jdbc里创建和删除临时表
jamesby 2007-03-02   回复
我们一直使用procedure,没有碰到楼主说的问题,当然drop temp table 是个好习惯.
JAVA_ED 2007-03-02   回复
Ivan Li 写道
是drop临时表吧?truncate只是把数据清掉,临时表还在

drop当然更彻底一些.... 总之手动释放这些临时表资源是个好习惯
Ivan Li 2007-03-02   回复
是drop临时表吧?truncate只是把数据清掉,临时表还在
JAVA_ED 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临时表
发表评论

该博客是同时发布到论坛的,无法评论在论坛已被锁定的帖子

Ivan Li
搜索本博客
最近加入圈子
存档
最新评论