学废了: JDBC 的 prepareStatement 需要关闭吗?

2022-04-22 15:52:46 +08:00
 heavyrainn

请问 prepareStatement 在创建完之后需要关闭吗? 我现在的习惯是在连接数据库时将需要执行的 SQL 依次创建 prepareStatement 并放在一个 map 里面,供后续程序调用,今天跟同事讨论起来这个事儿了,同事说我这么干会内存溢出,我说我不是 createStatement 为啥会溢出呢? 所以…请教一下各位基本功扎实的大神们,prepareStatement 需要关闭吗…

1519 次点击
所在节点    程序员
7 条回复
Citrus
2022-04-22 16:02:43 +08:00
当然不要,这玩意设计出来就是因为了一次解析初始化多次使用的。不然干嘛不用 statement
codefever
2022-04-22 16:43:26 +08:00
可以把每个 sql 的 preparestatement 用 concurrenthashmap 缓存起来, 确保一个 sql 只有一个 preparestatement ,这样会提升性能
TWorldIsNButThis
2022-04-22 16:46:00 +08:00
什么叫内存溢出
memory overflow ?
anonydmer
2022-04-22 16:59:35 +08:00
“prepareStatement 缓存起来供后学程序调用” 这不会有线程安全问题么?
aguesuka
2022-04-22 17:46:29 +08:00
我猜你同事说的内存溢出和 prepareStatement 没有关系, 而是说你的 map 只创建不施放, 而且 key 不是有限的
cheng6563
2022-04-22 17:56:16 +08:00
prepareStatement 不是和连接绑定的吗?你事务怎么办?
chendy
2022-04-22 22:55:00 +08:00
这是什么特殊的优化技巧么
statement 也不是很重的对象,现用现获取问题不大,除非是一样的语句,可以稍微挤一点性能出来,但是感觉没必要
顺便一说这 2022 年了还直接撸 statement ,是老系统么……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/848593

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX