首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Hibernate连接到2008数据库实例

无法使用Hibernate连接到2008数据库实例
EN

Stack Overflow用户
提问于 2020-03-06 14:14:48
回答 1查看 76关注 0票数 0

我正在尝试使用Hibernate连接到MSSQL。当我试图连接到“普通”数据库时,我编写的代码是可以的,但是我总是得到一个数据库的异常,它有实例。

错误是:

代码语言:javascript
复制
2020-03-06 15:07:01.755  WARN  com.mchange.v2.async.ThreadPoolAsynchronousRunner: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@12fa2433 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
2020-03-06 15:07:01.758  WARN  com.mchange.v2.async.ThreadPoolAsynchronousRunner: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@12fa2433 -- APPARENT DEADLOCK!!! Complete Status: 
    Managed Threads: 3
    Active Threads: 3
    Active Tasks: 
        com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@5d00c227
            on thread: C3P0PooledConnectionPoolManager[identityToken->2sk2t6a81cvnu23110fpe1|11389053]-HelperThread-#0
        com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@1e98ae08
            on thread: C3P0PooledConnectionPoolManager[identityToken->2sk2t6a81cvnu23110fpe1|11389053]-HelperThread-#2
        com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@6c17f8ef
            on thread: C3P0PooledConnectionPoolManager[identityToken->2sk2t6a81cvnu23110fpe1|11389053]-HelperThread-#1
    Pending Tasks: 
        com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@6665ca79
        com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@3d2f3d68
Pool thread stack traces:
    Thread[C3P0PooledConnectionPoolManager[identityToken->2sk2t6a81cvnu23110fpe1|11389053]-HelperThread-#0,5,main]
        java.lang.Thread.sleep(Native Method)
        com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2336)
        com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:2067)
        com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1204)
        com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:825)
        com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175)
        com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220)
        com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206)
        com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203)
        com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138)
        com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125)
        com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
        com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870)
        com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)

使用相同的登录密码I,可以连接到数据库,但不能以编程方式连接,即使用sqlcmd。

我如何创建连接:

代码语言:javascript
复制
    public synchronized static SessionFactory getSessionFactory(Logger log, DbServer dbServer, String dbName) {

        String url = String.format("jdbc:sqlserver://%s:%d;databaseName=%s", dbServer.getServerName(), dbServer.getPort(), dbName);

        return new Configuration().configure()
            .setProperty("hibernate.connection.driver_class", "com.microsoft.sqlserver.jdbc.SQLServerDriver")
            .setProperty("hibernate.default_schema", "dbo")
            .setProperty("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect")
            .setProperty("hibernate.connection.username", dbServer.getLogin())
            .setProperty("hibernate.connection.password", dbServer.getPassword())
            .setProperty("hibernate.connection.url", url)
            .buildSessionFactory();
    }

dbServer.getServerName()返回"serverName\dbInstance",端口为1433,dbNamemaster。使用,我可以使用相同的登录/密码进行连接,因此我非常确定配置存在问题--我使用的是sys admin (sa),因此它不是权限问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-10 09:39:01

解决方案是在尝试连接到数据库时不要使用端口。因此,连接字符串如下所示:

代码语言:javascript
复制
String url = String.format("jdbc:sqlserver://%s;instanceName=%s;databaseName=%s", dbServer.getServerName(), dbServer.getInstanceName(), dbName);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60565866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档