java - Hibernate 连接字符串做 MS SQL Server 2008 数据库名称(带大括号)

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

我必须连接到数据库,该数据库的名称中包含大括号 - {}(谁能做到这一点?!)。 因此,数据库名称类似于 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/连接字符串?与该服务器上其他数据库的连接可以正常工作,但如果数据库名称包含“{}”,则会失败。

最佳答案

终于我成功解决了这个问题,这很简单,但花了几天时间才弄清楚。检查一下:

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

关于java - Hibernate 连接字符串做 MS SQL Server 2008 数据库名称(带大括号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60615618/

相关文章:

hibernate - 如何获得可重用的 Hibernate 标准。?

java - 是否可以将数据库凭据存储在 hibernate.cfg.xml 中

sql-server - 如何列出 SQL Server 中的所有索引 View ?

java - XML 格式不适用于 CDATA

java - 从 Ebean 中排除字段以将其保存在 DB 中

java - 保存存储在 RCP 应用程序 View 部分中的数据

hibernate - 嵌套的findAllBy *

sql-server-2008 - 是否可以通过 "turn off"查询来更新 Entity Framework 中的标识列

sql-server - 将 SQL Server 命名实例更改为默认实例

Java/Eclipse(WindowBuilder 插件)- 如何有效地使用 Swing Actionlistener?