MysqlConnectionPoolDataSource - не удается вставить в MySQL DB, используя jdbc?

0

Я должен использовать настраиваемую библиотеку пула соединений 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);
}

Вышеприведенный код НЕ работает, когда я подключаюсь к удаленному mysql db с версией: 8.0.11-commercial. Не работая, я имею в виду, что ошибки нет, вставка просто потеряна...

Когда я выполняю тот же код с моей локальной mysql db с версией: 8.0.11, размещенной на машине Windows, он работает...

Если я изменил соединение, получая код от

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

чтобы:

Connection conn = ds1.getConnection(); 

он также начинает работать с удаленными mysql db с версией: 8.0.11-commercial...

Режим autocommit базового соединения уже прав...

Я попытался реализовать собственный log4j logger с надеждой увидеть какой-то след, но это тоже не помогло:

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

В моей собственной библиотеке объединения пулов используется объединенное соединение, поэтому мне нужно, чтобы приведенный выше код работал. В клиенте я использую mysql-connector-java-8.0.11.jar.

Любая помощь приветствуется...

  • 1
    Почему бы не перейти на хорошо протестированный пул соединений вместо поддержки собственной пользовательской реализации? Пока код использует разумную абстракцию, например, java.sql.DataSource не должно влиять на логику приложения.
  • 0
    Привет, Кароль, это невозможно из-за развертывания, решения управления и т. Д. Но приведенный выше код демонстрирует проблему без какого-либо пула соединений ... Я выполняю его в изолированном основном классе и вижу ту же ошибку. Есть ли у вас какие-либо рекомендации для актуальной проблемы?
Показать ещё 5 комментариев
Теги:
database
jdbc

1 ответ

0

Кажется совершенно несвязанным, но установка параноидального свойства на истину, казалось, решила мою проблему...

----------------Edit: причина корня understood---------------------------------------

Проблема возникает, когда глобальное значение autocommit равно 0 на сервере. Выдача команды пользователя изменения, очистка данных сеанса и настройка автозапуска теряются.

Обходным решением является установка флажка autocommit еще раз после получения соединения...

Спасибо Филипе за анализ проблемы.

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

----------------Edit: ошибка created--------------------------------------

Оказалось, что это ошибка в драйвере JDBC. Ошибка была подана...

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню