【问题标题】:can't connect to mysql database in servlet无法连接到 servlet 中的 mysql 数据库
【发布时间】:2012-11-13 14:48:31
【问题描述】:

当我尝试连接到我的 MySQL 数据库时,我不断收到此错误:

exception

javax.servlet.ServletException: JDBC Problem: 
root cause

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.
root cause

java.net.ConnectException: Connection timed out: connect

这里有一些代码:

Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
        try{
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection
                    ("jdbc:mysql://mysql11.000webhost.com/database_name","user_name","password");
        stmt = con.createStatement();
        rs = stmt.executeQuery("INSERT into emailadresses('email') values ('"+email+"')");
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(EmailServlet.class.getName()).log(Level.SEVERE, null, ex);
        }catch(SQLException e){
            throw new ServletException("JDBC Problem: ", e);
        }

编辑:我的库中有 mysql-connector-java jar 文件

编辑:发现问题 我在托管我的数据库的网站上寻找答案并找到了这个:

JDBC/ODBC is not supported here

这太糟糕了……

【问题讨论】:

  • 你能从运行 jvm 的同一台机器上手动连接吗?
  • 问题之一可能是因为您没有指定端口。它应该看起来像 jdbc:mysql://mysql11.000webhost.com:3306/database_name

标签: java mysql jsp servlets


【解决方案1】:

“表示尝试将套接字连接到远程地址和端口时发生错误。通常,连接被远程拒绝(例如,没有进程正在侦听远程地址/端口)”。 - From Oracle Docs

查看您的连接字符串,确保数据库、用户名和密码输入正确。

另一个原因可能是您的数据库服务器没有启动。

【讨论】:

  • 我认为问题出在我的连接字符串上;我真的很讨厌那些东西......似乎无法找到它的问题
  • 尝试停止您的防火墙服务,它可能会阻止您的连接。
  • 我确实阻止了我的防火墙,但它仍然给了我同样的问题
【解决方案2】:

是的,它不是类路径问题,而是网络问题。由于某种原因,无法从您的客户端计算机与给定主机建立网络连接。所以是的,可能有很多东西。

  • 服务器实际上没有运行!
  • 主机/IP 错误
  • 防火墙(你这边)
  • 防火墙(另一边)
  • 可能存在其他网络问题

【讨论】:

  • 不要忘记 mysqld 监听 127.0.0.1 而不是 wan ip。那个抓住了很多人。
  • 嗯,服务器正在运行,我可以通过phpmyadmin进入数据库
  • 通常phpmyadmin 远程运行,在mysqld 旁边的服务器上,因此没有远程mysql 连接。
【解决方案3】:

绝对是网络问题。请注意,您的 tcp 连接 NOT 被拒绝,而是会导致超时错误。根据我的经验,这种行为可能是由未正确完成的 TCP 握手引起的(例如,防火墙丢弃了 SYN 数据包)。

【讨论】:

    【解决方案4】:

    尝试从运行应用程序的机器上的任何数据库客户端(如 sqlyog)连接该数据库。如果客户端的连接也失败,那么肯定是网络问题。

    【讨论】:

      猜你喜欢
      • 2016-03-22
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 2014-01-25
      • 1970-01-01
      相关资源
      最近更新 更多