Database 在tomcat服务器上使用连接池时出现数据同步问题

Database 在tomcat服务器上使用连接池时出现数据同步问题,database,tomcat,servlets,Database,Tomcat,Servlets,我正在开发一个Servlet应用程序。它从Tomcat容器支持的连接池中获取数据库连接,以查询和更新数据库数据 我遇到了一个问题。Servlet获取数据库连接,然后添加新表行或删除表行。之后,它提交更改。稍后,将获得一个连接以执行查询。我发现从使用第二个连接的查询返回的数据没有反映第一个数据库连接所做的更改 这不是很奇怪吗?已成功提交对第一个数据库连接所做的更改。为什么插入的新行不会出现在后面的查询中?为什么删除的行仍然出现在后面的查询中 它是否与事务级别的设置有关 有人能帮忙吗 03-12:更

我正在开发一个Servlet应用程序。它从Tomcat容器支持的连接池中获取数据库连接,以查询和更新数据库数据

我遇到了一个问题。Servlet获取数据库连接,然后添加新表行或删除表行。之后,它提交更改。稍后,将获得一个连接以执行查询。我发现从使用第二个连接的查询返回的数据没有反映第一个数据库连接所做的更改

这不是很奇怪吗?已成功提交对第一个数据库连接所做的更改。为什么插入的新行不会出现在后面的查询中?为什么删除的行仍然出现在后面的查询中

它是否与事务级别的设置有关

有人能帮忙吗

03-12:更多信息(#1):

  • 我使用MySQL社区服务器5.6
  • 我的servlet在Tomcat7.0.41.0上运行
  • conf/server.xml中的资源元素如下所示:

  • 我不显式使用任何缓存
  • 每次servlet获得数据库连接时,它都会关闭连接的自动提交模式
  • 调用servlet时,将获得数据库连接。servet使用它来更新数据库中的数据。之后,它提交更改。然后,它使用ApacheHttpClients调用同一个servlet来执行其他一些操作,这些操作还获得数据库连接并执行查询。后面的查询返回“旧”数据。如果刷新网页,将显示最新的数据。它看起来像是某一方,mysql jdbc驱动程序或连接对象,将数据缓存在某个地方。我不知道
  • 03-12:更多信息(#2): 我做了一个实验,在不使用连接池的情况下获得连接。结果是正确的。因此,问题是由连接池引起的

    要使查询使用池中的第二个连接返回正确的数据,我不仅需要使用池中的第一个连接提交数据更改,还需要关闭第一个连接

    在调用close()之前,即使调用commit(),所做的数据更改似乎也不会完全保存在数据库中


    为什么?

    我发现最近发布了一个新版本的C3P0连接池。我试了一下。它起作用了!我遇到的问题没有发生。因此,我使用它来替换Tomcat服务器的绑定连接池。对于那些遇到和我一样问题的人来说,C3P0可能也是一个解决方案


    如果直接查询数据库,更新的记录是否存在?有缓存在进行吗?您确定您的提交工作正常吗?您正在使用哪个连接池(Tomcat有2个)?你的数据库是什么?您的事务隔离级别是什么?你在使用自动提交吗?没有发生错误?我今天更新了我的问题,如上所示。谢谢你的评论。
    <Resource type="javax.sql.DataSource"
           name="jdbc/storewscloud"
           factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
           driverClassName="com.mysql.jdbc.Driver"
           url="jdbc:mysql://localhost:3306/myappdb"
       maxActive="100"
            minIdle="10"
            maxWait="10000"
            initialSize="10"
            removeAbandonedTimeout="60"
           removeAbandoned="true"
           logAbandoned="true"
           username="root"
           password="xxxxxxxxxx"
    /></li>