Java MySQL - 命名管道连接在关闭时抛出警告

时间:2011-09-22 04:54:07

标签: java mysql jdbc named-pipes connector-j

我使用命名管道连接到使用Connector / J的Java中的MySQL。我的连接和查询成功,但是当我尝试关闭连接时收到警告。我想知道除了删除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连接,则不会出现错误。但是,这些解决方案都不能令我满意。我想确保连接正确关闭,我将使用命名管道连接。

有什么想法吗?

- (编辑) - 另外:连接器/ J中的日志引发错误。我的错误捕获与捕获和打印错误的方式无关。我试图研究如何禁用WARN问题,并打印出严重问题(在Connector / 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 :(得分:0)

由于它似乎是一个错误,我已经向MySQL错误论坛提交了一份官方错误报告。

每当收到更新时,我都会在此发回。

更新:

MySQL编码器分析了我的错误报告。他们认为这是一个JAVA错误。

Bug Report