MysqlConnectionPoolDataSource - не удается вставить в MySQL DB, используя jdbc? - PullRequest
0 голосов
/ 04 июня 2018

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

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

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

Если я изменяю код получения соединения с

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

на:

Connection conn = ds1.getConnection(); 

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

Режим автоматической фиксации базового соединения уже действителен ...

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

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

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

Любая помощь очень ценится ...

1 Ответ

0 голосов
/ 06 июня 2018

Это кажется совершенно не связанным, но установка свойства параноика в true, похоже, решила мою проблему ...

---------------- Редактировать: Основная причинапонял ---------------------------------------

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

Обходное решение состоит в том, чтобы снова установить флаг автоматической фиксации после установления соединения ...

Благодаря Filipe для анализа проблемы ..

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

---------------- Редактировать: Ошибка создана --------------------------------------

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...