search

Home  >  Q&A  >  body text

java - MyBatis SqlSession 没调用close关闭前锁死db文件,没法往里面insert数据

环境:
tomcat + sqlite + mybatis

项目需求是这样的:需要做一个基于Web的Linux服务器监视系统,把服务器状态存入sqlite的db文件中(服务器用C++写的,服务器也是每隔一段时间用C++ 把数据插入到sqlite中),Web请求每隔一定时间查看数据库内容,并更新内容到网页上,所以自然就想到了用mybatis来与数据库互交。

都知道mybatis与数据库互交大概是遵从这样规范的(取自mybatis官方网站):

1

2

3

4

5

6

7

8

9

10

<code>SqlSession session = sqlSessionFactory.openSession();

try {

    // following 3 lines pseudocod for "doing some work"

    session.insert(...);

    session.update(...);

    session.delete(...);

    session.commit();

} finally {

    session.close();

}</code>

在try里面我就添加了查询数据的代码块,并返回相关json数据,都是正确的。但是我无意中发现,在session打开之后,没有close之前,C++ server 插入会失败(它两是并发的,两进程是共享一个db文件,一个是Servlet用MyBatis读取db文件,一个是C++写的server写db文件),这样会导致后面的步骤就全错了。有什么办法可以让C++ 在session close之后(意思就是同步等待一会儿)再进行insert操作,因为我从C++端无法判断是否在session过程中。

PHP中文网PHP中文网2897 days ago843

reply all(1)I'll reply

  • 大家讲道理

    大家讲道理2017-04-17 16:15:21

    You can determine whether the session is empty. If it is empty, the connection is closed.

    reply
    0
  • Cancelreply