各位大大求助啊...毕业设计要跪了..问题很奇怪,我现在要远程访问数据库,使用数据库连接软件或者命令行都能够远程连接上,在数据库所在的电脑上也能用我的程序连接上,但是我的程序远程连接却报错:如下
2016-4-24 17:25:20 org.hibernate.cfg.SettingsFactory buildSettings
警告: Could not obtain connection metadata
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
Last packet sent to the server was 0 ms ago.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2103)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at org.logicalcobwebs.proxool.DefaultConnectionBuilder.buildConnection(DefaultConnectionBuilder.java:39)
at org.logicalcobwebs.proxool.Prototyper.buildConnection(Prototyper.java:159)
at org.logicalcobwebs.proxool.ConnectionPool.getConnection(ConnectionPool.java:211)
at org.logicalcobwebs.proxool.ProxoolDriver.connect(ProxoolDriver.java:89)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at org.hibernate.connection.ProxoolConnectionProvider.getConnection(ProxoolConnectionProvider.java:53)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:84)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
at cn.edu.dhu.acm.oj.persistence.dao.HibernateSessionFactory.<clinit>(HibernateSessionFactory.java:31)
at cn.edu.dhu.acm.oj.persistence.dao.BaseHibernateDAO.getSession(BaseHibernateDAO.java:9)
at cn.edu.dhu.acm.oj.persistence.dao.ContestDAO.findContestByStatus(ContestDAO.java:76)
at cn.edu.dhu.acm.oj.web.listener.RankTask.run(RankTask.java:36)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:253)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:280)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2026)
... 27 more
2016-4-24 17:25:20 org.logicalcobwebs.proxool.Prototyper sweep
严重: Prototype
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
我的hibernate的配置写的是
求大神解决我的疑惑啊 T T

解决方案 »

  1.   

    应该是连接的问题需要逐步诊断1 在你的远端电脑上,安装mysql客户端,远程连接数据库,看是不是正常
    如果不正常,应该是server的port或路由之类的问题,比如iptables,路由端口2 在远端电脑上,写个简单的jdbc程序,用你现在的hibernate环境,看看你的mysql driver能不能连上
    如果不正常,是mysql driver或jvm的问题,换个mysql,重装一遍jvm因为你在db server上可以跑你的hibernate,配置应该没什么问题
      

  2.   


    你用的是连接池。但是应该还有一个文件,是jdbc的配置文件,里面会有 要连接到的 数据库名称、ip地址、用户名、密码,看看是否正确。
      

  3.   

    回复2楼,我用的是Navicat远程是能打开的,而且自己写的程序远程也能访问到数据库,这是我测试的代码    public static void main(String[] args) throws SQLException {
        Connection conn = null;
         try {
             Class.forName("com.mysql.jdbc.Driver");
             conn = DriverManager.getConnection("jdbc:mysql://192.168.1.102:3306/","dhuoj","jouhd");
             System.out.println(" 远程Mysql连接测试: " + conn);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally{
            try {
              conn.close();
            } catch (SQLException e) {
               e.printStackTrace();
           }
         }
      }
    显示的结果是 : 远程Mysql连接测试: com.mysql.jdbc.JDBC4Connection@a56a7c
    问题应该不是mysql和路由上吧,不过非常感谢你
      

  4.   

    回复3楼:
    我找了好久也没找到配置jdbc的文件啊T T,这个是我的hibernate.cfg.xml文件<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <property name="hibernate.connection.provider_class">
                org.hibernate.connection.ProxoolConnectionProvider
            </property>
            <property name="hibernate.proxool.pool_alias">dhuOJPool</property>
            <property name="hibernate.proxool.xml">proxool.xml</property>
            <property name="show_sql">false</property>
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>        <mapping resource="cn/edu/dhu/acm/oj/persistence/beans/Problem.hbm.xml"/>
            <mapping resource="cn/edu/dhu/acm/oj/persistence/beans/Solution.hbm.xml"/>
            <mapping resource="cn/edu/dhu/acm/oj/persistence/beans/Contest.hbm.xml"/>
            <mapping resource="cn/edu/dhu/acm/oj/persistence/beans/User.hbm.xml"/>
            <mapping resource="cn/edu/dhu/acm/oj/persistence/beans/ContestProblem.hbm.xml"/>
            <mapping resource="cn/edu/dhu/acm/oj/persistence/beans/ContestReservation.hbm.xml"/>
            <mapping resource="cn/edu/dhu/acm/oj/persistence/beans/SourceCode.hbm.xml"/>
            <mapping resource="cn/edu/dhu/acm/oj/persistence/beans/Compileinfo.hbm.xml"/>
            <mapping resource="cn/edu/dhu/acm/oj/persistence/beans/Message.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>在其他的
    好像也没有哪里能配置jdbc了..
      

  5.   

    你说远程机器上能用navicat和jdbc连,的确不是网络和连接的问题。不过,按你说的:
    你的hibernate程序在DB Server那台机器上是正确的,拿到远程机器上就不能用。
    这样的问题不太可能吧。两个机器上的JDK,jdbc,mysql driver,hibernate,以及maven之类的难道有差别?
    你不是直接把所有的jar和war都拿到远程机器上运行的吗?
      

  6.   

    在DB Server上运行hibernate的时候,配置文件与远程机器上不一样吗?
    你的applicationContext.xml是怎么配置的?
      

  7.   

    回复gikod:
    两个机器的jar和war都是一样的,我是直接复制过去的。配置文件都是一样的,IP地址都是DB server的ip.还有applicationContext.xml我的工程里面没有这个文件。我这个工程功能是从向数据库中写数据的,虽然是个网站类型的但没有网页功能。还有这个工程是之前学长写的,看别人代码真的是蛋碎啊,而且更坑的是这周五就要用了,我感觉我要被老师骂死了
      

  8.   

    应该是配置文件的问题,找了好久也没找到有啥要配置的xml,估计是配置文件的问题。hibernate还需要配置其他的文件吗?这个工程不是我自己写的,除了proxool.xml还有别的xml要改吗?
      

  9.   


    如果你的Project没有用Spring,没有applicationContext.xml是正常的。
    我只是想确定你的Project的确依靠你贴的配置文件,而不是别的配置,比如环境变量或者其他的jndi之类的服务。如果你能确定你的jar、war、配置文件是一样的,那么跟应用就应该没有关系了。只是Java Web Server的环境依赖复杂,比如Tomcat说不定你就用到了什么其他的依赖。应用程序只能你自己检查了。实在不明白去Java相关的版问问。
    这个检测,你再添加一个execute "select * from mysql.user;"试试看吧。这个能跑通,至少说明不是网络的问题。跟上面的分析就矛盾了。只能建议你再用你的原项目,原 proxool 的配置,写一个测试程序debug了。
      

  10.   

    建议这样:找一个hibernate的入门视频(就像尚学堂那种的),照人家的例子敲一个hibernate的demo,然后对比一下应该就知道问题在哪了。
      

  11.   

    jdbc能得到Connection,问题应该在hibernate的配置上
      

  12.   

    不好意思昨天太忙了没上来开,谢谢你的zhu19774279兄弟的建议,我对hibernate不是很了解,学习学习再来搞这个问题。现在只能把程序放到数据库的电脑上来用了。。
      

  13.   


    听你说的还是学生吧,那其实就问题不大。
    学校里只要能跑,怎么弄都问题不大。需要注意的是,如果你自己写测试程序,因为你用的 proxool 池,所以要用 proxool 写测试程序才行。