mysqlconnectionpooldatasource-不能使用jdbc插入到mysql数据库吗?

sg2wtvxw  于 2021-06-20  发布在  Mysql
关注(0)|答案(5)|浏览(233)

我必须使用自定义的jdbc连接池库来连接mysql数据库。
问题是我的插入没有在数据库中持久化。。。为了缩小问题范围,我提取了插入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 db时,上面的代码不起作用。不工作,我的意思是没有错误,插入只是丢失。。。
当我在本地mysql数据库上执行相同的代码时,版本是:8.0.11,托管在windows机器上,它正在工作。。。
如果我改变连接,从

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

收件人:

Connection conn = ds1.getConnection();

它也开始在版本为8.0.11-commercial的远程mysql数据库上工作。。。
基础连接的自动提交模式已为true。。。
我试图实现一个定制的log4j记录器,希望看到一些跟踪,但也没有帮助:

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

我的自定义连接池库使用池连接,所以我需要让上面的代码正常工作。在客户机中,我使用mysql-connector-java-8.0.11.jar。
非常感谢您的帮助。。。

monwx1rj

monwx1rj1#

------编辑:bug已创建

m1m5dgzv

m1m5dgzv2#


服务器中的全局自动提交值为0时出现问题。发出更改用户命令,清除会话数据,自动提交设置丢失。
一个解决方案是在获得连接后再次设置autocommit标志。。。
感谢菲利佩对问题的分析。。
https://forums.mysql.com/read.php?39,666702666986#味精-666986

a7qyws3x

a7qyws3x3#


原来这是jdbc驱动程序中的一个bug。一个bug被归档了。。。
https://bugs.mysql.com/bug.php?id=91351

nfs0ujit

nfs0ujit4#

这似乎完全无关,但设置偏执属性为真似乎解决了我的问题。。。

p1iqtdky

p1iqtdky5#

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

相关问题