【问题标题】:"Error calling Driver#connect" using Hibernate使用 Hibernate 时“调用 Driver#connect 时出错”
【发布时间】:2014-03-16 18:37:06
【问题描述】:

这是我的 cfg.xml 文件:

    <!-- Database connection settings -->
    <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
    <property name="connection.url">jdbc:sqlserver://localhost:1433;DatabaseName=hiber;</property>
    <property name="connection.username">Costi-PC\Costi</property>
    <property name="connection.password"></property>

    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>

    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>

    <!-- Disable the second-level cache -->
    <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>

    <!-- Drop and re-create the database schema on startup -->
    <property name="hbm2ddl.auto">create</property>

    <!-- Names the annotated entity class -->
    <mapping class="model.User" />

用户类和主类:

@Entity
    public class User {

        @Id
        private int userId;
        private String userName;

        public int getUserId() {..}
        public void setUserId(int userId) {..}
        public String getUserName() {..}
        public void setUserName(String userName) {..}

    }

    public class Main {

        public static void main(String[] args) {
           User user = new User();
           user.setUserId(1);
           user.setUserName("Costi");

           AnnotationConfiguration configuration = new AnnotationConfiguration();
           configuration.configure();

           SessionFactory sessionFactory = configuration.buildSessionFactory();

           Session session = sessionFactory.openSession();
           session.beginTransaction();
           session.save(user);
           session.getTransaction().commit();
           session.close();

           sessionFactory.close();

}

当我运行程序时,我得到这个错误:

Exception in thread "main" org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:132)
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator$1$1.convert(BasicConnectionCreator.java:118)
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:140)
    at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:58)
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:75)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:106)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:89)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:206)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:89)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:206)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178)
    at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928)
    at main.Main.main(Main.java:23)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
    at com.microsoft.sqlserver.jdbc.SQLServerException.ConvertConnectExceptionToSQLServerException(SQLServerException.java:241)
    at com.microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.java:2243)
    at com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:491)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1309)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
    at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:55)
    ... 14 more

我使用的是 sql server 2008。 我尝试了不同类型的 cfg 配置,但似乎都不起作用。 我相信问题出在connection.url。我试图更改端口(1433)但没有。 谁能告诉我是什么问题?

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    我知道这篇文章已经有将近 2 年的历史了,但对我来说,这些问题给了我正确的答案。因为有同样问题的人正在从谷歌获得这篇文章。我想,让我们添加我的故事。

    同样的事情,同样的问题。对我来说,答案是 SQL Server 不接受来自外部的连接。 tcp/ip 网络客户端配置是标准禁用的。

    所以这对我来说是一个正确方向的提示。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,只是我更改了 mysql 服务器连接器上的版本而不是正常工作

          <!-- commented as it was not make to connect 
             <dependency> 
                <groupId>mysql</groupId> 
                <artifactId>mysql-connector-java</artifactId> 
                <version>5.1.34</version> 
             </dependency> 
         -->
      

      添加了最新版本的mysql连接器

         <!-- added latest version of mysql connector -->
                  <dependency>
                      <groupId>mysql</groupId>
                      <artifactId>mysql-connector-java</artifactId>
                      <version>8.0.18</version>
                  </dependency>
      

      【讨论】:

        【解决方案3】:

        我改变了MySql的版本,比如,

        从 5.1.8 开始

        <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.8</version>
            </dependency>    
        

        到 8.0.19

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.19</version>
            </dependency>
        

        它对我有用。 谢谢你。

        【讨论】:

          【解决方案4】:

          在 DB 的所有权限下使用它

           <property name="hibernate.connection.url">jdbc:mysql://ip:3306/dbname</property><property name="hibernate.connection.username">*******</property>
               <property name="hibernate.connection.password">*******</property> 
          

          【讨论】:

          • app[web.1]:原因:org.hibernate.exception.JDBCConnectionException:调用Driver#connect时出错
          【解决方案5】:

          尝试进入命令行并查看 sqlserver 是否确实在侦听该端口。在 Windows 上,这将是命令:

          netstat -nao | findstr 1433
          

          然后在windows(Ctr+Alt+Delete)进程列表中查看PID是否为Sql Server。

          如果服务器正在运行,请尝试使用 SQL 客户端 GUI 连接到它,请参阅此处以获取 examples。当您可以从外部客户端成功连接到数据库时,请从 Java 程序重试。

          尝试查看您的本地防火墙设置是否是导致错误的原因,尽管默认情况下防火墙不会阻止 localhost - 请查看此answer

          【讨论】:

            【解决方案6】:

            检查你的席德

            hibernate.cfg.xml 文件

            对于 Oracle 快捷版:

            <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
            

            对于 Oracle 企业版:

            <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property> 
            

            【讨论】:

            • 是的,我没有看到他/她正在使用 sql server 2008。实际上我也面临同样的异常。我只解决 SID 中的问题
            【解决方案7】:

            错误是由于 AnnotationConfiguration 并通过它进行会话。 你可以试试这个解决方案:

            @Autowired
            SessionFactory sessionFactory;
            Session session = sessionFactory.getCurrentSession();
            session.saveOrUpdate(ce);
            

            【讨论】:

              【解决方案8】:

              由于一些依赖问题,我也面临同样的问题。我解决了我的问题,以更改与 pom.xml 文件中我当前版本的 sql server 兼容的 sql 依赖。

              【讨论】:

                【解决方案9】:

                从 jTDS1.2.8 迁移到 mssql-jdbc 时我遇到了同样的错误,对我来说,它有助于删除端口号并在 hibernate.cfg.xml 中的连接 URL 中指定命名实例

                发件人:

                <property name="hibernate.connection.url">jdbc:sqlserver://MYHOSTNAME:1433;databaseName=mydbname;instanceName=MYINSTANCENAME;</property>
                

                收件人:

                  <property name="hibernate.connection.url">jdbc:sqlserver://MYHOSTNAME;instanceName=MYINSTANCENAME;databaseName=mydbname;</property>
                

                参考:https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-2017

                使用命名和多个 SQL Server 实例时,要使用 JDBC URL 属性,请执行以下操作:

                jdbc:sqlserver://localhost;instanceName=instance1;integratedSecurity=true;<more properties as required>;
                

                【讨论】:

                  【解决方案10】:

                  如果您使用的是虚拟服务器或未更新的服务器,则应更新时区。

                  SQL 控制台:

                  SET GLOBAL time_zone = '+3:00';
                  

                  【讨论】:

                    【解决方案11】:

                    配置休眠文件“hibernate.cfg.xml”中的用户名或密码错误

                    【讨论】:

                      【解决方案12】:

                      请确保您尝试连接的数据库已经在同名数据库中创建。

                      【讨论】:

                        【解决方案13】:

                        如果您使用的是 Hibernate 4,请尝试切换到 Hibernate 5。

                        <dependency>
                            <groupId>org.hibernate</groupId>
                            <artifactId>hibernate-core</artifactId>
                            <version>5.4.10.Final</version>
                        </dependency>
                        

                        这帮助我解决了错误。

                        【讨论】:

                          猜你喜欢
                          • 2014-07-04
                          • 1970-01-01
                          • 1970-01-01
                          • 2014-11-23
                          • 1970-01-01
                          • 2015-08-08
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多