当前位置: 首页 > article >正文

gbase8s数据库+mybatis问题记录

在实际使用中一般都是mybatis+数据库连接池组合使用,单独使用mybatis 连接数据库时,在循环使用PreparedStatement 时 会发生内存泄漏,PreparedStatement资源得不到释放

测试代码片段如下

drawMapper = sqlsession.getMapper(DrawMapper.class);for(int i=0;i<10000;i++) {System.out.println("i= " + i);drawMapper.mergeInto(list);sqlsession.commit();}
sqlsession.close();

函数调用如下

drawMapper.mergeInto(list)
mapperMethod.execute(sqlSession, args)
sqlSession.update
executor.update(ms, wrapCollection(parameter))
delegate.update(ms, parameterObject)
doUpdate(ms, parameter)
closeStatement(stmt)
statement.isClosed()

最后判断statement.isClosed()时,会直接调用jdbc底层的isClosed()函数,查看文档发现,该函数为jdk1.6引入,当时gbase jdbc并未实现该函数,导致判断异常,从而无法释放statement对象资源,在大量的循环中易发生内存泄漏

在使用三方的数据库连接池 如 druid,c3p0等,连接管理由连接池本身维护,不需要调用jdbc中isClosed()函数

http://www.lryc.cn/news/2392710.html

相关文章:

  • 实现安卓端与苹果端互通的方案多种多样,以下是一些主要的方案
  • SpringBoot开发——Spring Boot异常处理全攻略:五大方案实战对比
  • React-props
  • 【C++篇】list模拟实现
  • Oracle exist
  • 带sdf 的post sim 小结
  • 【面试】喜茶Java面试题目
  • 深入浅出:Spring IOCDI
  • PlankAssembly 笔记 DeepWiki 正交视图三维重建
  • 某验4无感探针-js逆向
  • js中common.js和ECMAScript.js区别
  • C语言操作Kafka
  • STM32架构解析
  • 在线政治采购系统架构构建指南
  • UHF RFID无源标签的芯片供电原理
  • 【NLP入门系列一】NLP概述和独热编码
  • 洛谷习题V^V
  • Wireshark 在 macOS 上使用及问题解决
  • 不同电脑同一个网络ip地址一样吗?如何更改
  • Qt使用智能指针
  • 微软 Azure AI Foundry(国际版)十大重要更新
  • Realsense D435i 使用说明
  • PostgreSQL如何更新和删除表数据
  • 【leetcode】704. 二分查找
  • Golang | 运用分布式搜索引擎实现视频搜索业务
  • 针对Helsinki-NLP/opus-mt-zh-en模型进行双向互翻的微调
  • 【笔记】Trae+Andrioid Studio+Kotlin开发安卓WebView应用
  • Github 2025-05-30Java开源项目日报Top10
  • Github上一些使用技巧(缩写、Issue的Highlight)自用
  • TextIn OCR Frontend前端开源组件库发布!