我正在努力让我的数据库与我的Java程序通信。
有人可以使用JDBC给我一个快速而又脏的示例程序吗?
我收到了一个相当惊人的错误:
Exception in thread "main" 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:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2260)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at SqlTest.main(SqlTest.java:22)
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:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181)
... 12 more
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:218)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:293)
... 13 more
测试文件的内容:
import com.mysql.jdbc.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlTest {
public static void main(String [] args) throws Exception {
// Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// // edit the jdbc url
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/projects?user=user1&password=123");
// Statement st = conn.createStatement();
// ResultSet rs = st.executeQuery( "select * from table" );
System.out.println("Connected?");
}
}
答案 0 :(得分:217)
所以,你有一个
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通讯链接故障
java.net.ConnectException:拒绝连接
我引用this answer,其中还包含一步一步的MySQL + JDBC教程:
如果您获得
SQLException: Connection refused
或Connection timed out
或MySQL特定CommunicationsException: Communications link failure
,则表示根本无法访问该数据库。这可能有以下一个或多个原因:
- JDBC URL中的IP地址或主机名错误。
- 本地DNS服务器无法识别JDBC URL中的主机名。
- JDBC URL中缺少或错误端口号。
- 数据库服务器已关闭。
- 数据库服务器不接受TCP / IP连接。
- 数据库服务器已用完连接。
- Java和DB之间的某些东西阻止了连接,例如防火墙或代理。
醇>
要解决其中一个问题,请遵循以下建议:
- 使用
ping
验证并测试它们。- 刷新DNS或在JDBC URL中使用IP地址。
- 根据MySQL DB的
my.cnf
进行验证。- 启动数据库。
- 验证mysqld是否在没有
--skip-networking option
的情况下启动。- 重新启动数据库并相应地修改代码,以关闭
中的连接finally
。- 禁用防火墙和/或配置防火墙/代理以允许/转发端口。
醇>
答案 1 :(得分:8)
当Java出堆时我抓住了这个异常。如果我尝试在RAM中放入许多数据项 - 首先我抓住“通信链接失败”,然后“ OutOfMemoryError ”。
我记录了它并减少了内存消耗(删除1/2数据),一切正常。
答案 2 :(得分:8)
这是最佳解决方案,
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/DBname", "root", "root");
Connection con = DriverManager.getConnection(
"jdbc:mysql://192.100.0.000:3306/DBname", "root", "root");
将Localhost替换为您的IP地址
答案 3 :(得分:7)
如果数据库连接长时间处于空闲状态,则会发生此com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
异常。
这个空闲连接在connection.isClosed();
上返回true但如果我们尝试执行语句,那么它将触发此异常,因此我建议使用数据库池。
答案 4 :(得分:5)
我可能在这里咆哮错误的树,但你的异常似乎表明你的MySQL服务器不可用。
线程“main”中的异常com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 通信链路故障成功发送到服务器的最后一个数据包为0 几毫秒之前。驱动程序未收到来自服务器的任何数据包。在...
如果您尝试(从终端)
会发生什么mysql -u username -p
系统将提示您输入与用户名关联的密码。在你给出正确的密码后,mysql客户端连接了吗?
如果没有,您可能必须从首选项启动MySQL。您也可以将其设置为在启动时运行。
答案 5 :(得分:5)
就我而言,结果是mysql-connector-java
的版本太旧了。
在我的演示中,我以某种方式使用mysql-connector-java
这样:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
但是在开发环境中,我使用它:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
我的MySQL版本是5.1.48(是的,它很旧,只是为了模仿产品版本)。所以我遇到了同样的错误。
由于找到了原因,也找到了解决方案。匹配版本!
答案 6 :(得分:5)
我几个小时都遇到了同样的问题。我正在使用MAMP服务器
不使用localhost:[Apache Port],而是使用MySQL端口。
以下是MAMP服务器的默认MySQL端口。
String url = "jdbc:mysql://localhost:8889/db_name";
Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);
答案 7 :(得分:4)
请在/etc/mysql/my.cnf文件中更新您的IP地址
bind-address = <IP_ADDRESS>
重启mysql deamon和mysql服务。
答案 8 :(得分:4)
早期答案是恰当的。但是,我还想指出一个更普遍的问题。
我遇到了类似的问题,原因是我公司的网络限制。
当我在任何其他网络时,相同的连接获得了成功。
答案 9 :(得分:3)
我得到了同样的错误,因为我试图在不启动mysql服务器的情况下运行我的程序。
启动mysql服务器后,一切正常。
答案 10 :(得分:3)
在{{3}下载MySQL-JDBC-Type-4-Treiber(来自'mysql-connector-java-5.1.11.zip'的ig'mysql-connector-java-5.1.11-bin.jar') }。
您需要在类路径的编译和运行时期间插入驱动程序jar。
Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// edit the jdbc url
Connection conn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", username, password );
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery( "select * from table" );
答案 11 :(得分:3)
我的同样问题通过以下步骤解决:
转到my.cnf
vi /etc/mysql/my.cnf
修改其bind-address
"#bind-address = 127.0.0.1"
重启mysql
sudo /etc/init.d/mysql restart
答案 12 :(得分:2)
如果您使用WAMP
或XAMP
服务器来安装mysql数据库。
然后你必须明确启动mysql服务器,否则它将显示
与数据库连接时com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
答案 13 :(得分:2)
如果您更改了端口,则会出现此类错误“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure” 请检查您的端口号
答案 14 :(得分:2)
刚刚经历过这个。
通过以下方式使其工作: (这可以放在静态块初始化器中)
static{ // would have to be surrounded by try catch
Class.forName("com.mysql.jdbc.Driver"); // this will load the class Driver
}
同样通过以下方式获得连接:
conn = DriverManager.getConnection(DBURL,<username>,<password>);
而不是指定登录参数
Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123");
问候。
答案 15 :(得分:2)
我以一种简单的方式解决了这个问题,这对我有用。我有seme问题“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure”。在我的db.properties文件中,我有这个:url:jdbc:mysql:// localhost:90 / myDB, 只删除了端口url,导致这种方式url:jdbc:mysql:// localhost / myDB,这对我有用。
答案 16 :(得分:2)
当我在my.ini和php.ini文件中将mysql端口从3306更改为3307但在更改端口(3307-> 3306)后再次正常工作时,就发生了这种情况。
答案 17 :(得分:1)
尝试将localhost
更改为127.0.0.1
。
localhost将被解析为::1
。默认情况下,MySQL无法通过IPv6连接。
以下是telnet localhost 3306
:
$ telnet localhost 3306
Trying ::1...
MySQL服务器没有响应。
当然,请确保您的MySQL服务器正在运行。
答案 18 :(得分:1)
对于远程调用Mysql
将远程用户添加到 Mysql 中,例如IP = remoteIP:
ViewController
允许对MySQL的远程访问(默认情况下,不允许所有外部调用):
mysql -u xxxx -p //local coonection to mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO 'theNewUser'@'remoteIP' IDENTIFIED BY 'passWord';
//Query OK, 0 rows affected (xx sec)
mysql> FLUSH PRIVILEGES;
//Query OK, 0 rows affected
对于最新版本的JDBC驱动程序,JDBC:
Edit
/etc/mysql/mysql.conf.d/mysqld.cnf or /etc/mysql/my.cnf
Change line: bind-address = 127.0.0.1 to
#bind-address = 127.0.0.1
Restart Mysql: /etc/init.d/mysql restart
答案 19 :(得分:1)
dbhost=jdbc:mysql://172.18.23.100:3306/yourdatabase?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
user=root
password=Password#321
con = DriverManager.getConnection(dbhost, user, password);
如果mysql版本8或更高版本的用户更新了连接器
答案 20 :(得分:1)
如果Java尝试通过SSL连接到MySQL,也可能发生此错误,但是出了点问题。 (就我而言,我正在配置Payara Server 5.193.1与MySQL的连接池。)
有人建议设置useSSL=false
。但是,由于Connector / J版本8.0.13
,该设置已被弃用。以下是MySQL Connector/J 8.0 Configuration Properties的摘录:
sslMode
默认情况下,网络连接经过SSL加密;此属性允许关闭安全连接,或选择其他级别的安全性。允许使用以下值:
DISABLED
-建立未加密的连接;PREFERRED
-(默认)如果服务器启用了加密连接,则建立它们,否则退回到未加密的连接;REQUIRED
-如果服务器启用了安全连接,则建立安全连接,否则将失败;VERIFY_CA
-与REQUIRED
相似,但还要对照已配置的证书颁发机构(CA)证书验证服务器TLS证书;VERIFY_IDENTITY
-与VERIFY_CA
类似,但还要验证服务器证书是否与尝试连接的主机匹配。此属性替换了已弃用的旧版属性
useSSL
,requireSSL
和verifyServerCertificate
,这些属性仍然可以接受,但是如果sslMode
会转换为sslMode
的值未明确设置:useSSL=false
转换为sslMode=DISABLED
;{"useSSL=true", "requireSSL=false", "verifyServerCertificate=false"}
转换为sslMode=PREFERRED
;{"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"}
转换为sslMode=REQUIRED
;{"useSSL=true" AND "verifyServerCertificate=true"}
被翻译为sslMode=VERIFY_CA
。sslMode=VERIFY_IDENTITY
没有等效的旧设置。请注意,对于所有服务器版本,sslMode
的默认设置为PREFERRED
,它等效于useSSL=true
,requireSSL=false
和{{1}的旧设置。 },在某些情况下与Connector / J 8.0.12及更早版本的默认设置不同。应当继续使用继续使用旧属性并依赖其旧的默认设置的应用程序。如果显式设置
verifyServerCertificate=false
,则遗留属性将被忽略。如果未明确设置sslMode
或sslMode
中的任何一个,则将应用useSSL
的默认设置。默认:
sslMode=PREFERRED
自版本:8.0.13
因此,就我而言,设置PREFERRED
是解决问题所需的全部。
这是在测试机器上。但是对于生产而言,安全的解决方案将是正确配置Java客户端和MySQL服务器以使用SSL。
请注意,通过禁用SSL,您可能还必须设置sslMode=DISABLED
。 (再次,从安全角度来看,这不是明智的决定)。在MySQL ConnectionString Options中提供了更多信息:
AllowPublicKeyRetrieval
如果用户帐户使用
allowPublicKeyRetrieval=true
身份验证,则在传输过程中必须保护密码; TLS是实现此目的的首选机制,但是如果它不可用,则将使用RSA公钥加密。要指定服务器的RSA公钥,请使用sha256_password
连接字符串设置,或设置ServerRSAPublicKeyFile
以允许客户端自动从服务器请求公钥。请注意,AllowPublicKeyRetrieval=True
可能允许恶意代理执行MITM攻击以获取纯文本密码,因此默认情况下为False,必须明确启用它。
答案 21 :(得分:0)
我通过降级jdk版本解决了这个问题。 从 11.0.11 降级到 11.0.10 或更旧的 Java 版本
答案 22 :(得分:0)
我收到多个错误,例如:
string str = "Data Source=(local);Initial Catalog=Northwind;"
+ "Integrated Security=SSPI";
string queryString =
"SELECT price FROM price WHERE service ... ";
using (SqlConnection connection =
new SqlConnection(connectionString))
{
SqlCommand command =
new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
// Call Read before accessing data.
while (reader.Read())
{
ReadSingleRow((IDataRecord)reader);
}
// Call Close when done reading.
reader.Close();
}
CommunicationsException: Communications link failure
。我必须添加:
在AndroidManifest.xml中,在开始清单标记之后紧随java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference at
。
将JDBC驱动程序添加到您的Gradle(或Maven)依赖项中。
答案 23 :(得分:0)
我有相同的连接错误: 我的问题是我使用MySQL 8.0.15,但Java连接器是5.x.x。
下面是我如何解决Router.php
<?php
class Router
{
protected $routes = [];
public static function load($file)
{
$router = new static;
require $file;
return $router;
}
public function define($routes)
{
$this->routes = $routes;
}
public function direct($uri)
{
if (array_key_exists($uri, $this->routes)) {
return $this->routes[$uri];
}
throw new Exception('No route defined for this URI.');
}
}
?>
。
1.下载8.0.15。从Maven存储库:
https://search.maven.org/search?q=g:mysql%20AND%20a:mysql-connector-java
重新运行它,问题就消失了。\
答案 24 :(得分:0)
示例jdbc连接类文件。要获得连接时,只需调用getConnection方法。包括相关的mysql-connector.jar
import java.sql.Connection;
import java.sql.DriverManager;
public class DBConnection {
public Connection getConnection() {
Connection con = null;
String dbhost;
String user;
String password;
// get properties
dbhost="jdbc:mysql://localhost:3306/cardmaildb";
user="root";
password="123";
System.out.println("S=======db Connecting======");
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(dbhost, user, password);
//if you are facing with SSl issue please try this
//con = DriverManager.getConnection("jdbc:mysql://192.168.23.100:3306/cardmaildb?useUnicode=yes&characterEncoding=UTF-8&useSSL=false",user, password);
} catch (Exception e) {
System.err.println("error in connection");
e.printStackTrace();
}
System.out.println("E=======db Connecting======");
return con;
}
public static void main(String[] args) {
new DBConnection().getConnection();
}
}
答案 25 :(得分:0)
就我而言,当我尝试从同一主机连接到在Ubuntu主机VM的容器内运行的mysql-server时遇到此错误。
示例:
如果我的虚拟机名称为abc.company.com
,则以下jdbc URL 不起作用:
jdbc:mysql://abc.company.com:3306/dbname
在类似xyz.company.com
的其他计算机上,jdbc url可以正常工作,但在abc.company.com
上则不能。
在abc.company.com
机器上,以下jdbc URL 可以正常工作:
jdbc:mysql://localhost:3306/dbname
这导致我检查了/etc/hosts
文件。
在/etc/hosts
中添加以下行可解决此问题:
127.0.1.1 abc.company.com abc
这似乎是一个操作系统错误,需要我们在某些Ubuntu版本中添加它们。 参考:https://www.debian.org/doc/manuals/debian-reference/ch05.en.html#_the_hostname_resolution
在尝试此操作之前,我尝试了所有其他解决方案,例如GRANT ALL..
,更改了mysql.cnf中的bind-address
行。在这种情况下,它们都没有帮助我。
答案 26 :(得分:0)
旧的jdbc驱动程序
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
新的Jdbc驱动程序
<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.6.2</version>
</dependency>
答案 27 :(得分:0)
这个问题有很多答案,我认为我的问题更适合另一个问题,但该问题的答案是固定的。它指向此线程。
为我解决的是将&createDatabaseIfNotExist=true
附加到spring.datasource.url
中的application.properties
字符串中。
这非常棘手,因为它在几个不同的,怪异的,看似无关的错误中表现出来,并且当我尝试修复它抱怨的内容时,只会弹出另一个错误,或者是无法修复该错误。它抱怨无法加载JDBC,说它不在类路径中,但是我以大约30种不同的方式将其添加到类路径中,并且已经可以进行桌面办公了。
答案 28 :(得分:0)
就我而言,解决方案是将预期的 TLS 协议添加到连接字符串中,如下所示:
jdbc:mysql://localhost:3306/database_name?enabledTLSProtocols=TLSv1.2
答案 29 :(得分:0)
我在远程 Jenkins 服务器上运行自动化测试时遇到了这个问题。然而,在本地运行测试时没有发生任何问题。
对我来说,这个问题是在将 mysql-connector 版本更新到 POM 文件中的最新版本后解决的,因为 MySQL 版本在服务器端发生了变化。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
</dependency>
但是调试起来有点困难,几乎花了两天时间,因为我不知道 MySQL 版本的变化,而且它在本地运行良好。
答案 30 :(得分:0)
在我的情况下,我必须建立到远程数据库的ssh隧道,并且所有设置都是正确的,并且与PhpStorm的连接测试也成功。并且还加载了架构,但未加载数据。相反,我得到了:
[08S01] 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.
以上建议均无效。出于任何原因,我都试图通过简单地重新启动PhpStorm来解决该问题,瞧!
答案 31 :(得分:0)
打开文件/etc/mysql/my.cnf: 从
更改以下参数 bind-address = 127.0.0.1 to bind-address = 192.168.0.3 #this is your local system IP Address
,
在mysql中为特定IP地址运行以下命令->
grant all privileges on dbname.* to dbusername@'192.168.0.3' IDENTIFIED BY 'dbpassword';
如果要授予对所有IP地址的访问权限,请运行以下命令:
grant all privileges on dbname.* to dbusername@'%' IDENTIFIED BY 'dbpassword';
答案 32 :(得分:0)
启动应用程序时我遇到了同样的问题,
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.
问题在于,在mysql文件 /etc/mysql/mysql.conf.d/mysqld.cnf 中,配置是这样的
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
因此我们可以看到绑定地址指向127.0.0.1,因此对于启动您的应用程序,一个简单的解决方案是我们可以使用 jdbc:mysql://127.0.0.1:3306 / pizzeria 而不是 jdbc:mysql:// localhost:3306 / pizzeria ,它将把mysql连接到应用程序或另一个解决方案是您可以检查并将mysql配置更改为默认配置。能行得通。 我希望它也对你们有用。
答案 33 :(得分:0)
在我的MacBook中,只有重新安装新版本的eclipse EE并删除本地服务器(如xamp mysql或mamp,但仅使用其中之一)时,我才能解决此错误。
答案 34 :(得分:0)
我的防火墙阻止了我的MySQL监听的帖子3307。所以我将端口从3307更改为3306.然后我可以成功连接到数据库。
答案 35 :(得分:0)
它试图连接到旧版本的MySQL('版本','5.1.73' );当您使用较新的驱动程序版本时,您会收到一条错误消息,告诉您使用“com.mysql.cj.jdbc.Driver ,甚至您无需指定使用哪一个:< / p>
加载类
com.mysql.jdbc.Driver'. This is deprecated. The new driver class is
com.mysql.cj.jdbc.Driver'。司机是 通过SPI自动注册并手动加载驱动程序 上课通常是不必要的。
我更改了声明以使用mysql-connector-java的5.1.38版本,并且在代码中,我保留了 com.mysql.jdbc.Driver 。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
当我看到Ankit Jain的answer
时,一切都开始了答案 36 :(得分:0)
为我解决的是做两件事: 1.使用以下connads创建除root之外的新用户:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;
2。注释mysqld.conf上的IP地址行
然后用新的用户名和密码连接。它应该工作。
答案 37 :(得分:0)
也许你没有启动你的Mysql和Apache Server。从XAMPP控制面板启动Apache服务器和Mysql后,连接成功建立。
祝你好运!答案 38 :(得分:0)
这可能是一个简单的jar问题。可能是您正在使用当前mysql版本不支持的旧mysql-connector-java-XXX-bin.jar
。我使用mysql-connector-java-5.1.18-bin.jar
,因为我正在使用mysql 5.5
,这个问题已经解决了。
答案 39 :(得分:0)
我遇到了同样的问题,这是如何修复的:
ResultSet (getString("columnName"))
传递给一个与我的数据库中的列名不匹配的对象。我不确定哪一个解决了这个问题,但它确实奏效了。另外,请确保为每个表查询创建新的Statement
和ResultSet
。
答案 40 :(得分:-1)
如果有任何读者在访问远程服务器时遇到此问题:请确保端口已打开
答案 41 :(得分:-2)
您的服务器也可能刚刚关闭。在Mac上,通过聚光灯导航至mySQL首选项面板。在那里,选中该复选框以在计算机启动时启动服务器并启动服务器。