ホームページ  >  に質問  >  本文

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

环境:
tomcat + sqlite + mybatis

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

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

SqlSession session = sqlSessionFactory.openSession();
try {
    // following 3 lines pseudocod for "doing some work"
    session.insert(...);
    session.update(...);
    session.delete(...);
    session.commit();
} finally {
    session.close();
}

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

PHP中文网PHP中文网2764日前783

全員に返信(1)返信します

  • 大家讲道理

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

    セッションが空かどうかを判断できます。空の場合は、接続が閉じられています。

    返事
    0
  • キャンセル返事