jdbc:无法创建与数据库服务器的连接[重复]
Posted
技术标签:
【中文标题】jdbc:无法创建与数据库服务器的连接[重复]【英文标题】:jdbc : Could not create connection to database server [duplicate] 【发布时间】:2017-05-29 00:03:08 【问题描述】:我正在尝试使用 jdbc 连接 mysql 数据库。 这是我的数据库连接类:
public class Database
String userName = "myUserName";
String password = "myPass";
String url = "jdbc:mysql://xxx.xxx.xxx.xxx:3306/database_Name?autoReconnect=true&useSSL=false";
public void connect()
try
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection(url,userName,password);
Statement statement = conn.createStatement();
String queryString = "select * from users";
ResultSet rs = statement.executeQuery(queryString);
while (rs.next())
System.out.println(rs.getString(2));
catch (Exception e)
e.printStackTrace();
现在,您可以假设我正在调用该方法:
new Database().connect();
我得到了这个例外:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2163)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2088)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:806)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at Database.<init>(Database.java:17)
at ServerTest.main(ServerTest.java:8)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:989)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:341)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2251)
at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2104)
... 19 more
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300)
... 21 more
*我添加了 % 从远程访问数据库。
*Java 部分适用于本地主机,但是当我尝试这个远程数据库时,它失败了。
*数据库和表都创建好了。(这个没有问题)
那么问题出在哪里?
【问题讨论】:
你的MySql Server 起来了吗?您的密码和用户是否正确? 是的,它已经启动,我的网站也在使用该服务器。我尝试了 2 个不同的用户名和密码,但没有成功。 我在您的代码中找不到错误。一切都好。唯一不能出错的地方是MySql Server的配置,尝试通过命令行运行一个查询,看看是否真的在工作或接受来自其他地方的连接 你能telnet到数据库服务器吗?您是否将服务器更改为绑定 TCP 而不是 unix-sockets (howtogeek.com/howto/mysql/switch-mysql-to-listen-on-tcp)?java.net.ConnectException: Connection refused: connect
表明您的 MySQL 服务器未运行,未在指定端口上运行,或使用的 ip 地址未打开该端口,或防火墙正在主动阻止连接。跨度>
【参考方案1】:
Java 部分适用于本地主机,但是当我尝试使用此远程数据库时,它失败了
这意味着,您的 MySql 服务器绑定到 localhost 并且在外部不可见。
请将您的 MySql conf 文件中的bind-address
属性设置为主机的实际 IP 地址。
例如:bind-address=192.168.1.26
实际 IP 地址,是指运行 java 代码的客户端可见的那个。这可以是 Intranet 地址或公共 IP。如果您要公开您的公共 IP,您可能需要使用一些防火墙。
【讨论】:
我没有使用vps。我从一家公司购买了主机。我想我无权访问mysql conf。 在这种情况下,必须有一些基于 UI 的方式来配置你的 MySql。 我认为没有办法配置 MySql 来托管客户。 当我的 .it 防火墙为我工作时以上是关于jdbc:无法创建与数据库服务器的连接[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 JDBC 将 Java 代码与远程 MySQL 数据库连接 [重复]
MySQLNonTransientConnectionException:无法创建与数据库服务器的连接。尝试重新连接 3 次。放弃[重复]