MysqlConnectionPoolDataSource - 无法使用jdbc插入mysql数据库?

时间:2018-06-04 09:51:08

标签: java mysql database jdbc

我必须使用自定义的jdbc连接池库连接到mysql db。

问题是我的插入不会在db中持久化...为了缩小问题范围,我将插入到db中的库代码部分提取出来并有一些奇怪的发现:

MysqlConnectionPoolDataSource ds1 = new MysqlConnectionPoolDataSource();
ds1.setUser("usr");
ds1.setPassword("pwd");
ds1.setServerName("server");
ds1.setPort(port);
ds1.setDatabaseName("dbname");
ds1.setUseSSL(false);
ds1.setAllowPublicKeyRetrieval(true);


Connection conn = ds1.getPooledConnection("usr", "pwd").getConnection();

logger.info("connection " + conn.toString());

PreparedStatement ps = null;
ResultSet rs = null;

try {

    String query = "INSERT INTO ...";
    ps = conn.prepareStatement(query);

    int timeout = 10;
    ps.setQueryTimeout(timeout);

    logger.info("timeout: " + timeout);
    logger.info("Starting query execution for query: " + query);
    long qeStart = System.currentTimeMillis();

    ps.setString(1, "...");

    ps.executeUpdate();

    long qeEnd = System.currentTimeMillis();
    logger.info("Query execution completed in " + (qeEnd - qeStart) + "msec.");
} catch (Exception e) {
    logger.error("ERROR OCCURED", e);
    System.err.println("ERROR OCCURED");
    e.printStackTrace();

} finally {
    closeResultSet(rs);
    closeStatement(ps);
    closeConnection(conn);
}

当我连接到版本为8.0.11-commercial的远程mysql数据库时,上面的代码不起作用。通过不工作我的意思是没有错误,插入只是丢失...

当我在Windows机器上托管版本:8.0.11的本地mysql数据库执行相同的代码时,它正在运行...

如果我从

更改连接获取代码
Connection conn = ds1.getPooledConnection("usr", "pwd").getConnection();

为:

Connection conn = ds1.getConnection(); 

它也开始对远程mysql db工作,版本:8.0.11-commercial ...

底层连接的自动提交模式已经成立......

我试图实现一个自定义的log4j记录器,希望看到一些痕迹,但这也无济于事:

ds1.setLogger("com.ibtech.mysqlproblem.Log4jLogger");

我的自定义连接池库使用池化连接,因此我需要使上述代码正常工作。在客户端我使用的是mysql-connector-java-8.0.11.jar。

非常感谢任何帮助...

1 个答案:

答案 0 :(得分:0)

似乎完全不相关但是将偏执属性设置为真似乎解决了我的问题......

----------------编辑:根本原因理解----------------------- ----------------

当服务器中的全局自动提交值为0时,会出现问题。发出更改用户命令,清除会话数据和自动提交设置将丢失。

解决方法是在获取连接后再次设置自动提交标志...

感谢Filipe分析问题..

https://forums.mysql.com/read.php?39,666702,666986#msg-666986

----------------编辑:错误创建------------------------ --------------

事实证明这是JDBC驱动程序中的一个错误。已经提交了一个错误......

https://bugs.mysql.com/bug.php?id=91351