浏览 8606 次
锁定老帖子 主题:使用临时表时要注意
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-03-02
临时表还没等被删除,另一个thread又要创建同名的临时表。这是就会报异常,说这个临时表已经存在了。 2:在同一个transaction里,不要使用同名的临时表,否则同样会报临时表已经存在了的异常,在同一个dao里,也许没有人会傻到 重复创建临时表,在dao中不同的方法里使用相同的临时表的名字也是危险的,如果这两个dao方法被同一个service方法调用,而这个service存在 又是使用spring来管理transaction,那么,实际上者两个dao方法使用的是同一个connection,如果两个dao方法里使用同名临时表,那么后调用的 dao方法就会报异常,说临时表已经存在。 经验总结: 1:事务一定要加上事务控制。 2:不供dao方法里的临时表名要不同。 这个是今天trouble shooting发现的问题。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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临时表 |
|
返回顶楼 | |
发表时间:2007-03-02
是drop临时表吧?truncate只是把数据清掉,临时表还在
|
|
返回顶楼 | |
发表时间:2007-03-02
Ivan Li 写道 是drop临时表吧?truncate只是把数据清掉,临时表还在
drop当然更彻底一些.... 总之手动释放这些临时表资源是个好习惯 |
|
返回顶楼 | |
发表时间:2007-03-02
我们一直使用procedure,没有碰到楼主说的问题,当然drop temp table 是个好习惯.
|
|
返回顶楼 | |
发表时间:2007-03-02
我是说在jdbc里创建和删除临时表
|
|
返回顶楼 | |
发表时间:2007-03-05
procedure比临时表更优美,java代码里还是少做些底层的代码好.写成配制文件都行.
|
|
返回顶楼 | |
发表时间:2007-03-08
主要是Sybase不支持嵌套查询,只能用临时表。
|
|
返回顶楼 | |