gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:44:51 25 4
gpt4 key购买 nike

我正在使用 Connector/J 使用命名管道连接到 Java 中的 MySQL。我的连接和查询成功,但当我尝试关闭连接时收到警告。我想知道除了删除 connection.close()(或删除 try-with-resources 连接 block 而不是添加 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 连接 block 完成后)我收到以下错误/警告:

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 block (并且不添加 connection.close()),则永远不会出现警告。此外,如果我切换到 TCP/IP 连接,则错误永远不会出现。但是,这些解决方案都不适合我的情况。我想确保连接正确关闭,我将使用命名管道连接。

有什么想法吗?

--(编辑)--另外:错误是由 Connector/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
}
}
}

最佳答案

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

每当我收到更新时,我都会发回这里。

更新:

我的错误报告已由 MySQL 编码人员分析。他们认为这是一个 JAVA 错误。

Bug Report

关于Java MySQL - 命名管道连接在关闭时抛出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7509739/

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