【问题标题】:Hibernate connection string do MS SQL Server 2008 database name with bracesHibernate 连接字符串做 MS SQL Server 2008 数据库名称带大括号
【发布时间】:2020-03-10 10:21:44
【问题描述】:

我必须连接到数据库,它的名称中有大括号 - {}(谁能做到?!)。 所以数据库名称就像Production{guid-part-123123-123123-abcd},当我尝试连接它时出现错误。

连接字符串是:

public synchronized static SessionFactory getSessionFactory(String dbName) {

        String url = String.format("jdbc:sqlserver://someServer:1433;databaseName=%s", dbName); // what can I do to give proper database name?

        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", "admin")
            .setProperty("hibernate.connection.password", "admin")
            .setProperty("hibernate.connection.url", url)
            .buildSessionFactory();
    }

如何建立正确的 url/连接字符串?与此服务器上的其他数据库的连接正常,但如果数据库名称包含“{}”,则会失败。

【问题讨论】:

    标签: java hibernate sql-server-2008 java-8 connection-string


    【解决方案1】:

    我终于设法解决了这个问题,这很简单,但花了几天时间才弄明白。检查这个:

    public synchronized static SessionFactory getSessionFactory(String dbName) {
    
        String url = "jdbc:sqlserver://someServer:1433"; // we should skip here database name
    
        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", "admin")
            .setProperty("hibernate.connection.password", "admin")
            .setProperty("hibernate.connection.url", url) // url is parsed by DriverManager class
            .setProperty("hibernate.connection.databaseName", dbName) // this property is not parsed but just used
            .buildSessionFactory();
    }
    

    如您所见,要解决它,您需要将dbName 作为属性传递,这意味着不被解析。找到解决方案帮我回答了这个问题:https://stackoverflow.com/a/53704163/1679995

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多