V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
heavyrainn
V2EX  ›  程序员

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

  •  
  •   heavyrainn · 2022-04-22 15:52:46 +08:00 · 1485 次点击
    这是一个创建于 706 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    7 条回复    2022-04-22 22:55:00 +08:00
    Citrus
        1
    Citrus  
       2022-04-22 16:02:43 +08:00 via iPhone
    当然不要,这玩意设计出来就是因为了一次解析初始化多次使用的。不然干嘛不用 statement
    codefever
        2
    codefever  
       2022-04-22 16:43:26 +08:00
    可以把每个 sql 的 preparestatement 用 concurrenthashmap 缓存起来, 确保一个 sql 只有一个 preparestatement ,这样会提升性能
    TWorldIsNButThis
        3
    TWorldIsNButThis  
       2022-04-22 16:46:00 +08:00 via iPhone
    什么叫内存溢出
    memory overflow ?
    anonydmer
        4
    anonydmer  
       2022-04-22 16:59:35 +08:00
    “prepareStatement 缓存起来供后学程序调用” 这不会有线程安全问题么?
    aguesuka
        5
    aguesuka  
       2022-04-22 17:46:29 +08:00
    我猜你同事说的内存溢出和 prepareStatement 没有关系, 而是说你的 map 只创建不施放, 而且 key 不是有限的
    cheng6563
        6
    cheng6563  
       2022-04-22 17:56:16 +08:00
    prepareStatement 不是和连接绑定的吗?你事务怎么办?
    chendy
        7
    chendy  
       2022-04-22 22:55:00 +08:00
    这是什么特殊的优化技巧么
    statement 也不是很重的对象,现用现获取问题不大,除非是一样的语句,可以稍微挤一点性能出来,但是感觉没必要
    顺便一说这 2022 年了还直接撸 statement ,是老系统么……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5353 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 07:31 · PVG 15:31 · LAX 00:31 · JFK 03:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.