Java MySQL - Именованный канал соединения выдает предупреждение при закрытии - PullRequest
2 голосов
/ 22 сентября 2011

Я подключаюсь к MySQL в Java с помощью Connector / J, используя именованные каналы. Мое соединение и запрос выполнены успешно, но я получаю предупреждение при попытке закрыть соединение. Я хотел бы знать, что я должен сделать, чтобы исправить все, что вызывает предупреждение, кроме удаления connection.close () (или удаления блока соединения try-with-resources и не добавления connection.close ()).

Вот мой код для запроса:

public static List<List> QueryDB(int RowValue) {
    List<Long> ValueList = new ArrayList();

        try {
            try (Connection Connection_T = MySQLConnectionResources.createConnection()) {
                try (Statement Statement_T = Connection_T.createStatement()) {
                    String String_T = "SELECT AColumn FROM ATable WHERE BColumn = " + RowValue + ";";
                    try (ResultSet ResultSet_T = Statement_T.executeQuery(String_T)) {
                        while (ResultSet_T.next()) {
                            ValueList.add(ResultSet_T.getLong("AColumn"));
                        }
                    }
                }
            }
        } catch(SQLException SQLException_P) {
            System.err.println("ERROR: Failed to query the database.");
            ValueList.clear();
        }

    List<List> Result_M = new ArrayList();
    Result_M.add(ValueList);
    return Result_M;
}

«MySQLConnectionResources» - это просто пользовательский класс с методом «createConnection ()». В классе / методе нет ничего особенного; он просто создает и возвращает соединение.

После того, как метод завершен (или технически, после завершения блока подключения Java 7 try-with-resources) я получаю следующее сообщение об ошибке / предупреждение:

Thu Sep 22 00:31:54 EDT 2011 WARN: Caught while disconnecting...

EXCEPTION STACK TRACE:



** BEGIN NESTED EXCEPTION ** 

java.net.SocketException
MESSAGE: Socket is not connected

STACKTRACE:

java.net.SocketException: Socket is not connected
    at java.net.Socket.shutdownInput(Socket.java:1456)
    at com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:1687)
    at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4368)
    at com.mysql.jdbc.ConnectionImpl.close(ConnectionImpl.java:1557)
    at ... my class/method here (my class.java:#)


** END NESTED EXCEPTION **

Если я удалю блок try-with-resources (и не добавлю connection.close ()), предупреждение никогда не появится. Кроме того, если я переключаюсь на соединение TCP / IP, ошибка никогда не появляется. НО, ни одно из этих решений не является удовлетворительным для моего случая. Я хочу убедиться, что соединение правильно закрыто, и я буду использовать соединения с именованными каналами.

Есть идеи?

- (редактировать) - Также: ошибка генерируется журналом в Connector / J. Моя перехват ошибок не имеет никакого отношения к тому, как ошибка перехватывается и печатается. Я пытался выяснить, как отключить проблемы ПРЕДУПРЕЖДЕНИЯ и распечатать его только ПРОБЛЕМЫМИ проблемами (в Журнале Соединителя / J), но мне это не удалось. Кроме того, я хотел бы исправить проблему WARN, а не игнорировать / скрывать ее.

- (редактировать 2) - Я контролировал базу данных MySQL, и соединения не закрываются. Если я использую строку подключения TCP / IP, а не строку подключения именованного канала (и больше ничего не меняю), соединение закрывается просто отлично.

- (редактировать 3) - Игнорируя мой оригинальный код ... просто попробуйте код ниже, и он выдаст предупреждение. Для меня это похоже на ошибку.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public final class main {
    public static void main(String[] args) {
        Connection conn = null;
        try {
            conn =

DriverManager.getConnection("jdbc:mysql:///database?socketFactory=com.mysql.jdbc.NamedPipeSocketFactory&namedPipePath=\\\\.\\Pipe\\mysql.sock",
"root", "password");

            conn.close();


        } catch (SQLException ex) {
            // handle any errors
        }
    }
}

1 Ответ

0 голосов
/ 26 сентября 2011

Поскольку это похоже на ошибку, я отправил официальный отчет об ошибке на форум ошибок MySQL.

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

ОБНОВЛЕНИЕ:

Мой отчет об ошибках был проанализирован программистами MySQL.Они считают, что это ошибка JAVA.

Отчет об ошибке

...