【问题标题】:Can't make JDBC connection to MySQL (using Java, IntelliJ, and Linux)无法与 MySQL 建立 JDBC 连接(使用 Java、IntelliJ 和 Linux)
【发布时间】:2011-01-07 08:34:19
【问题描述】:

我在尝试使用以下代码获取数据库连接时遇到问题:

  try {
        Class.forName("com.mysql.jdbc.Driver");
        Properties p = new Properties();
        p.put("user", user_name);
        p.put("password", password);
        connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1/jsp_test", p);
    } catch (SQLException ex) {
        // handle any errors
        ex.printStackTrace();
        System.out.println("SQLException: " + ex.getMessage());
        System.out.println("SQLState: " + ex.getSQLState());
        System.out.println("VendorError: " + ex.getErrorCode());
        return false;
    } catch (ClassNotFoundException e) {
        e.printStackTrace();  
    }

输出的错误信息是:

/usr/lib/jvm/java-6-openjdk/bin/java -Didea.launcher.port=7532 -Didea.launcher.bin.path=/usr/bin/idea/bin -Dfile.encoding=UTF-8 -classpath /usr/lib/jvm/java-6-openjdk/jre/lib/jce.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/about. jar:/usr/lib/jvm/java-6-openjdk/jre/lib/resources.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/management-agent.jar:/usr/lib /jvm/java-6-openjdk/jre/lib/jsse.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/charsets.jar:/usr/lib/jvm/java-6-openjdk /jre/lib/rt.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/ext/localedata.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/ext /sunjce_provider.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/ext/dnsns.jar :/家庭/就寝时间/Java 项目/db_demo/out/production/db_demo:/opt/java/jre/lib/ext/mysql-connector-java-5.1.10-bin.jar:/usr/bin/idea/lib/idea_rt.jar com.intellij .rt.execution.application.AppMain 主要的 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 通讯链路故障

最后一个数据包成功发送到 服务器是 0 毫秒前。这 驱动程序没有收到任何数据包 从服务器。在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:532) 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 在 com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074) 在 com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2214) 在 com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:781) 在 com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:46) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:532) 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 在 com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:352) 在 com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284) 在 java.sql.DriverManager.getConnection(DriverManager.java:620) 在 java.sql.DriverManager.getConnection(DriverManager.java:169) 在 数据库.Database.connect(Database.java:80) 在 Main.main(Main.java:13) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native 方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:616) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:110) 造成的: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 通讯链路故障

最后一个数据包成功发送到 服务器是 0 毫秒前。这 驱动程序没有收到任何数据包 从服务器。在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:532) 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 在 com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074) 在 com.mysql.jdbc.MysqlIO.(MysqlIO.java:343) 在 com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2137) ... 18 更多原因: java.net.ConnectException:连接 拒绝在 java.net.PlainSocketImpl.socketConnect(本机 方法)在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:310) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:176) 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:163) 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384) 在 java.net.Socket.connect(Socket.java:542) 在 java.net.Socket.connect(Socket.java:492) 在 java.net.Socket.(Socket.java:389) 在 java.net.Socket.(Socket.java:232) 在 com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:253) 在 com.mysql.jdbc.MysqlIO.(MysqlIO.java:292) ... 还有 19 个 SQLException: 通讯链路故障

最后一个数据包成功发送到 服务器是 0 毫秒前。这 驱动程序没有收到任何数据包 从服务器。 SQL 状态:08S01 供应商错误:0

进程以退出代码 0 结束

从字面上看,我不知道如何解决此错误消息。数据库存在。用户名和密码存在。我目前没有向数据库中添加任何表,但我认为这不是问题,因为毕竟我只是建立连接......

如果需要,我可以提供额外的信息。我觉得我已经尝试了很多。有人知道如何获取有关失败的方式和原因的更多信息吗?

感谢您的帮助! :)

【问题讨论】:

  • 可以直接连接(使用mysql客户端)吗?回溯中唯一有用的部分是 08S01,mysql 文档中提到了一些关于它的内容 (dev.mysql.com/doc/refman/5.0/en/…)。
  • 您是否尝试过使用 url “jdbc:mysql://localhost/jsp_test”?大多只是一个随机的调试猜测。
  • 我可以使用 mysql 客户端和我的用户名“jsp_test”直接连接。如果我将 127.0.0.1 更改为 localhost,我仍然无法连接。谢谢你的链接,我去看看。我想知道其他人是否可以尝试用他们自己的机器和 mysql-connector-java-5.1.10-bin.jar 做同样的事情

标签: java mysql linux jdbc jar


【解决方案1】:

根据您的连接字符串,该数据库应位于本地计算机上。您可以尝试运行此命令以确保套接字已打开以进行连接吗?

远程登录 127.0.0.1 3306

并确保它连接?你可能没有配置你的 mysql 实例来监听来自这台机器或这个接口地址的连接。如果连接失败,你需要修改你的mysql配置,例如:

http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html

【讨论】:

  • [bedtimes@seb ~]$ telnet 127.0.0.1 3306 Trying 127.0.0.1... telnet:无法连接到远程主机:连接被拒绝...看起来您可能是对的!我会去试试那个指南,如果它解决了问题,我会回复你。 C:
  • 我现在得到:[bedtimes@seb /]$ telnet localhost 3306 Trying 127.0.0.1... 已连接到 localhost。转义字符是'^]'。外部主机关闭连接。 ...有人知道这是什么意思吗?
  • 最终修复是通过更改本页指定的 hosts.allow:bbs.archlinux.org/viewtopic.php?pid=346836#p346836 Total PITA。谢谢! C:
【解决方案2】:

我有同样的症状,但对我来说,解决方案是将 /etc/mysql/my.cnf 中的绑定地址更改为 0.0.0.0

(只是为寻求此问题答案的其他人发布此内容)

【讨论】:

  • 我完全删除了 bind-address 行,它为我解决了同样的问题。
【解决方案3】:

你可以试试这个:

connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_test","user_name","password");

【讨论】:

    【解决方案4】:

    您可以尝试以下方法之一

    "jdbc:mysql://localhost:3306/jsp_test","username","password"
    

    "jdbc:mysql://'your machines ip (without quote)':3306/jsp_test","username","password"
    

    "jdbc:mysql://127.0.0.1:3306/jsp_test","username","password"
    

    作为连接字符串。

    【讨论】:

      猜你喜欢
      • 2019-05-11
      • 1970-01-01
      • 2017-02-07
      • 2015-01-16
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多