【问题标题】:How to create a database if it does not exist with springboot/JPA and SQL Server?如果 springboot/JPA 和 SQL Server 不存在,如何创建数据库?
【发布时间】:2020-12-27 06:45:58
【问题描述】:

我很惊讶我还没有找到一个可以回答这个问题的 SO 问题。我正在尝试将 springboot/JPA 应用程序连接到本地计算机上的 SQL Server。我有应用程序设置,以便它可以连接到数据库(如果它存在),但是如果我更改 JDBC URL 以创建数据库(如果它不存在)那么它会失败。这是失败时属性的样子。

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=testing;createDatabaseIfNotExist=true;
spring.datasource.username=hello
spring.datasource.password=Hello1234
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.database-platform=org.hibernate.dialect.SQLServer2008Dialect
spring.jpa.show-sql=true

这是我在启动应用程序时收到的错误的 sn-p:

com.microsoft.sqlserver.jdbc.SQLServerException: 用户登录失败 '你好'。 ClientConnectionId:971a3369-258b-4713-bddc-cda559b9fe94 在 com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262) ~[mssql-jdbc-8.4.0.jre11.jar:na] 在 com.microsoft.sqlserver.jdbc.TDSTokenHandle

如果有人对如何更改此设置有任何想法,以便在数据库不存在时创建数据库,我将非常感激。提前致谢。

【问题讨论】:

  • 你检查this question了吗?
  • 我相信我有,但那是使用 JDBC 和 mysql,所以我认为这没有帮助。我正在使用 spring/JPA 和 sql-server

标签: java sql-server spring jpa


【解决方案1】:

在实践中,您的应用程序不应该创建您的数据库,因此大多数时候它并不是一个真正的问题(在 sqlite3 等小型数据库之外)。不同的数据库也会以不同的方式处理这种情况。

在您的情况下,我认为这不是documentation 中的有效 jdbc 参数。 我建议您使用与您的应用程序用户分开的特权用户提前创建数据库。

【讨论】:

  • 我明白这一点。我同意它应该在其他地方创建,而不是一个好方法。这是针对 POC 的,如果我能像这样比给定我的设置的其他选项更容易。然而,这至少在 MYSQL 上是一个选项,并且认为因为它是一个选项,所以这里是一个选项。 dev.mysql.com/doc/connector-j/5.1/en/… ... 虽然可能无法使用 SqlServer。
  • Sql Server 通常用于您有专门的数据库人员和托管服务器的企业环境中。它并不是真正设计用于更非正式的情况。例如,直到最近,由于定价结构,仅在本地盒子上放一份副本是一种反常现象。
【解决方案2】:

我认为不能使用 JPA 创建数据库。 它必须手动创建或以其他方式创建,但 JPA 不会为您这样做。

使用应用程序本身创建数据库并使用相同的凭据也是一种不好的做法。

【讨论】:

    【解决方案3】:

    是的,您当然可以为此使用 JPA 自动创建数据库

    spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=testing;
    createDatabaseIfNotExist=true;
    

    行应改为:

    spring.datasource.url=jdbc:sqlserver://localhost:1433
    /testing?createDatabaseIfNotExist=true
    

    【讨论】:

      猜你喜欢
      • 2013-07-16
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 2017-04-11
      • 1970-01-01
      • 2020-03-19
      • 2017-01-30
      • 2012-06-17
      相关资源
      最近更新 更多