java - java.sql.SQLNonTransientConnectionException:无法创建到数据库服务器的连接。尝试重新连接 3 次。放弃
问题描述
它是一个 Web 应用程序,但它不起作用,所以我编写了一个主要方法来查看问题出在哪里。
驱动程序位于 Java Build Path -> Libraries -> Classpath 和 Libraries -> Web App Libraries(在项目资源管理器中)和 WEB-INF ->lib
jar 是 mysql-connector-java-8.0.12。
我已经尝试将其添加到我的连接字符串中:
"useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"
但它没有奏效。
以下代码出现错误
public synchronized static void aggiungiCliente() throws SQLException
{
Connection connection = null;
PreparedStatement preparedStatement = null;
String insertSQL = "insert into utente values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
try {
connection = ConnectionPool.getConnection();
preparedStatement = connection.prepareStatement(insertSQL);
preparedStatement.setString(1, "aa");
preparedStatement.setString(2,"aa");
preparedStatement.setString(3, "aa");
preparedStatement.setString(4, "aa");
preparedStatement.setString(5,"aa");
preparedStatement.setString(6, "aa");
preparedStatement.setInt(7, 12);
preparedStatement.setString(8,"aa");
preparedStatement.setString(9, "aa");
preparedStatement.setString(10,"aa");
preparedStatement.setInt(11, 12);
preparedStatement.setInt(12, 12);
preparedStatement.setDate(13, java.sql.Date.valueOf(java.time.LocalDate.now()));
preparedStatement.setString(14,"aa");
preparedStatement.setString(15,"aa");
preparedStatement.executeUpdate();
connection.commit();
} finally {
try {
if (preparedStatement != null)
preparedStatement.close();
} finally {
ConnectionPool.releaseConnection(connection);
}
}
}
public static void main(String[] args) {
try {
aggiungiCliente();
}
catch(SQLException e) {
System.out.println(e);
}
}
那是连接池应用程序
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
public class ConnectionPool {
static {
freeDbConnections = new LinkedList<Connection>();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("DB driver not found:"+ e.getMessage());
}
}
private static synchronized Connection createDBConnection() throws SQLException {
Connection newConnection = null;
String ip = "localhost";
String port = "3306";
String db = "code_omnia?autoReconnect=true&useSSL=false";
String username = "root";
String password = "Bonucci97";
newConnection = DriverManager.getConnection("jdbc:mysql://"+ ip+":"+ port+"/"+db, username, password);
newConnection.setAutoCommit(false);
return newConnection;
}
public static synchronized Connection getConnection() throws SQLException {
Connection connection;
if (!freeDbConnections.isEmpty()) {
connection = (Connection) freeDbConnections.get(0);
freeDbConnections.remove(0);
try {
if (connection.isClosed())
connection = getConnection();
} catch (SQLException e) {
connection.close();
connection = getConnection();
}
} else {
connection = createDBConnection();
}
return connection;
}
public static synchronized void releaseConnection(Connection connection) throws SQLException {
if (connection != null)
freeDbConnections.add(connection);
}
private static List<Connection> freeDbConnections;
}
和堆栈跟踪
java.sql.SQLNonTransientConnectionException:无法创建到数据库服务器的连接。尝试重新连接 3 次。放弃。
在 com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
在 com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
在 com.mysql.cj.jdbc .exceptions.SQLError.createSQLException(SQLError.java:89)
在 com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
在 com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError .java:73)
在 com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:902)
在 com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:827)
在 com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:456)
在 com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
在 com.mysql.cj.jdbc.NonRegisteringDriver.connect( NonRegisteringDriver.java:207)
at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
at model.ConnectionPool.createDBConnection(ConnectionPool.java:28 )
在 model.ConnectionPool.getConnection(ConnectionPool.java:49)
在 model.Query.aggiungiCliente(Query.java:38)
在 model.Query.main(Query.java:20)
原因:com.mysql.cj.exceptions.InvalidConnectionAttributeException:服务器时区值“ora legale Europa occidentale”无法识别或代表多个时区。如果要使用时区支持,则必须配置服务器或 JDBC 驱动程序(通过 serverTimezone 配置属性)以使用更具体的时区值。
在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
在 java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance (未知来源)
在 java.base/java.lang.reflect.Constructor.newInstance(未知来源)
在 com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
在 com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85)
在 com.mysql.cj.util.TimeUtil.getCanonicalTimezone (TimeUtil.java:128)
在 com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2236)
在 com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2260)
在com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1314)
在 com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:865)
... 10 更多
解决方案
推荐阅读
- c++ - Allow mutual dependencies in Cmake
- string - 返回引用新 &str 的结构
- apache-spark - 如何进行安静的服务调用以快速(er)更新数据框的列?
- javascript - 当块变量超出 javascript 范围时自动运行清理
- javascript - 如何使用函数在画布中创建五个尖角星?
- python - Python-需要根据用户输入计算成本
- javascript - Template literals (Template strings) didn't give the exact result in arrow function
- c++ - 将 NodeMCU 数据存储到 MySQL 数据库中
- html - IDE插入空白和浏览器将它们读取为char如何摆脱它?我正在使用 VSCode
- c# - 分配角色命令不适用于超过一个单词的角色