请问 prepareStatement 在创建完之后需要关闭吗? 我现在的习惯是在连接数据库时将需要执行的 SQL 依次创建 prepareStatement 并放在一个 map 里面,供后续程序调用,今天跟同事讨论起来这个事儿了,同事说我这么干会内存溢出,我说我不是 createStatement 为啥会溢出呢? 所以…请教一下各位基本功扎实的大神们,prepareStatement 需要关闭吗…
1
Citrus 2022-04-22 16:02:43 +08:00 via iPhone
当然不要,这玩意设计出来就是因为了一次解析初始化多次使用的。不然干嘛不用 statement
|
2
codefever 2022-04-22 16:43:26 +08:00
可以把每个 sql 的 preparestatement 用 concurrenthashmap 缓存起来, 确保一个 sql 只有一个 preparestatement ,这样会提升性能
|
3
TWorldIsNButThis 2022-04-22 16:46:00 +08:00 via iPhone
什么叫内存溢出
memory overflow ? |
4
anonydmer 2022-04-22 16:59:35 +08:00
“prepareStatement 缓存起来供后学程序调用” 这不会有线程安全问题么?
|
5
aguesuka 2022-04-22 17:46:29 +08:00
我猜你同事说的内存溢出和 prepareStatement 没有关系, 而是说你的 map 只创建不施放, 而且 key 不是有限的
|
6
cheng6563 2022-04-22 17:56:16 +08:00
prepareStatement 不是和连接绑定的吗?你事务怎么办?
|
7
chendy 2022-04-22 22:55:00 +08:00
这是什么特殊的优化技巧么
statement 也不是很重的对象,现用现获取问题不大,除非是一样的语句,可以稍微挤一点性能出来,但是感觉没必要 顺便一说这 2022 年了还直接撸 statement ,是老系统么…… |