gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:30:46 26 4
gpt4 key购买 nike

我必须使用自定义 jdbc 连接池库来连接到 mysql 数据库。

问题是我的插入没有保留在数据库中...为了缩小问题范围,我提取了插入数据库的库代码部分,并得到了一些奇怪的发现:

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(); 

它也开始对版本为8.0.11-commercial的远程mysql数据库工作...

底层连接的自动提交模式已经为true...

我尝试实现一个自定义 log4j 记录器,希望看到一些跟踪信息,但这也没有帮助:

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

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

非常感谢任何帮助...

最佳答案

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

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

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

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

感谢 Filipe 分析问题..

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

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

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

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

关于java - MysqlConnectionPoolDataSource - 无法使用 jdbc 插入到 mysql 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50677799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com