首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql JDBC连接池未实时获取数据库记录

问MySql JDBC连接池未实时获取数据库记录
EN

Stack Overflow用户
提问于 2012-05-01 19:22:42
回答 3查看 1.3K关注 0票数 1

我在mysql中使用JDBC连接池。这是我的代码

代码语言:javascript
复制
    private static DataSource   _ds;

    /**
    * create the data source if it doesn't exist
    */
private DataSource getDataSource() throws FileNotFoundException,
        IOException, URISyntaxException
{
    if (_ds != null)
        return _ds;


    PoolProperties p = new PoolProperties();
    p.setUrl(url);
    p.setDriverClassName(driver);
    p.setUsername(username);
    p.setTestOnBorrow(true);
    if (password != null)
    {
        p.setPassword(password);
    }
    p.setValidationQuery(validationQuery);
    p.setJdbcInterceptors(JDBC_INTERCEPTOR);
    DataSource datasource = new DataSource();
    datasource.setPoolProperties(p);
    _ds = datasource;
    return datasource;
}

/**
 * gets a connection from the JDBC pool
 * 
 * @throws SQLException
 * @throws IOException
 * @throws FileNotFoundException
 * @throws URISyntaxException 
 */
public Connection getConnection() throws SQLException,
        FileNotFoundException, IOException, URISyntaxException
{
    Connection con = getDataSource().getConnection();
    con.setAutoCommit(false);
    return con;
}

每当我想要使用连接时,我都会这样做:

代码语言:javascript
复制
con = getInstance().getConnection();
stmt = con.createStatement();
resultSet = stmt.executeQuery(selectQuery);

问题是查询的结果不是实时的。也就是说,如果我在DB中更改了一些内容并提交,如果DB是从另一个应用程序更改的,则java中的查询不会发生changes.same

注意:更改是在一段时间后进行的,或者如果我重新启动tomcat

我的代码有什么问题吗?如何修复这个错误?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-01 20:59:09

这很可能是由MySQL的默认隔离级别造成的,即可重复读取。

这意味着在结束(提交、回滚)自己的事务之前,您看不到其他事务所做的更改(记住: SELECT已经启动了一个事务)。

由于池中的连接永远不会关闭,因此这些事务可能不会结束。尝试在运行select之前执行commit或rollback命令。

对于永久解决方案,您可以通过配置连接池(大多数都允许这样做)来更改默认隔离,通过在连接上调用setTransactionIsolation()或通过更改MySQL中的默认级别来更改事务级别。

票数 3
EN

Stack Overflow用户

发布于 2018-10-25 12:58:13

也许是因为你关闭了:

代码语言:javascript
复制
autocommit(autocommit=0)

如果使用默认设置,请执行以下操作:

代码语言:javascript
复制
 autocommit=1, transaction isolation level = REPEATABLE READ

这个问题就会得到解决。

票数 0
EN

Stack Overflow用户

发布于 2012-05-01 19:54:14

这是由于现金,这是由大多数ide,如eclipse。因此,您需要停止并清除所有的现金,然后尝试运行代码。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10396968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档