JDBC 批量存储问题。

sunhao901001 2012-12-17 10:23:29
现在有一个批量存储的代码
	 		DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
gpsConnection = DriverManager.getConnection("地址", "用户名","密码");

gpsPS = (PreparedStatement) gpsConnection.prepareStatement(gpsSQL);

gpsConnection.setAutoCommit(false);
,因为是批量存储,所以gpsPS 和gpsConnection 始终没关闭,等到下一轮存储的时候,还执行上面的连接代码,应该是把gpsPS 和gpsConnection覆盖了吧,那前一轮的gpsPS 和gpsConnection会释放吗?现在压力是存储2000条没问题,4000条内存蹭蹭往上涨,是这个原因吗?
...全文
158 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
suciver 2012-12-17
  • 打赏
  • 举报
回复
引用 1 楼 ldh911 的回复:
虽然是批量存储,显然做完一批也应该提交事务并释放掉连接。 另外,你如果持续不提交事务的话,数据库都会被你弄死。
+1
  • 打赏
  • 举报
回复
你这样相当于每次存储都打加载驱动,建立连接。加载驱动,建立连接做成单例(因为只需要一次)。
MiceRice 2012-12-17
  • 打赏
  • 举报
回复
虽然是批量存储,显然做完一批也应该提交事务并释放掉连接。 另外,你如果持续不提交事务的话,数据库都会被你弄死。
MiceRice 2012-12-17
  • 打赏
  • 举报
回复
其实最好还是关闭,然后辅以连接池管理,否则如果JDBC连接断了你连个恢复机制都没有。 如果实在不想关闭,每次commit()后,调用一次: gpsConnection.clearWarnings(); Warnings内存泄露是一个已知问题。 暂不清楚长时间不释放连接是否还有其它泄漏风险。
sunhao901001 2012-12-17
  • 打赏
  • 举报
回复
大家好,我维护的这段代码是这样的,刚上来 DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); gpsConnection = DriverManager.getConnection("地址", "用户名","密码"); gpsPS = (PreparedStatement) gpsConnection.prepareStatement(gpsSQL); gpsConnection.setAutoCommit(false); while(true) { Thread.sleep(1); for(...) { gpsPS.addBatch(); } gpsPS.executeBatch(); gpsConnection.commit(); } 相当于每1毫秒钟执行一次批量存储,也有commit之类的,始终执行,while(true),所以始终不需要关闭操作。这样有问题吗?

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧