【问题标题】:Make schema created by Spring JDBC the default schema将 Spring JDBC 创建的 schema 设为默认 schema
【发布时间】:2016-02-19 03:16:41
【问题描述】:

我正在使用 Spring Boot 和 JDBC 进行数据库连接。我将 schema.sql 放在类路径中以初始化模式和表。

因为在连接到数据源时架构还不存在,所以我必须像这样在 application.properties 中配置数据源:

spring.datasource.url=jdbc:mysql://localhost:3306/

schema.sql:

CREATE DATABASE IF NOT EXISTS <schema_name>
USE <schema.name>;

CREATE TABLE...

所以我在创建模式后选择了它。这显然不会持续太久。

如何正确配置它?有没有办法在创建脚本之后选择默认架构或更改数据源 url?

【问题讨论】:

    标签: java mysql spring jdbc spring-boot


    【解决方案1】:

    使用 JDBC,您需要使用 Connection.setCatalog 在数据库之间切换。您不应该使用USE &lt;databasename&gt;,因为 JDBC 驱动程序本身需要知道它在哪个数据库上运行。

    【讨论】:

      【解决方案2】:

      基于您在 schema.sql 中的代码

      USE <schema.name>;
      

      这不适用于您的 java 环境。 schema.sql 将被执行并完成,这将无法满足您设置默认架构的要求。 一般的方法是使用 JDBC URL 作为;

      jdbc:mysql://localhost:3306/DB_NAME
      

      这会将默认数据库设置为 DB_NAME。 假设:我假设您要连接到单节点数据库,而无需使用任何负载均衡器或故障转移机制。 URL 可能会根据要配置的这些功能而改变。

      如果您没有在 URL 中指定 DB_NAME,则意味着它们不是默认架构。 在这种情况下,您有 2 个选项可以访问数据库。

      1) 始终使用Connection.setCatalog() 方法在 JDBC 应用程序中指定所需的数据库,而不是使用 USE database 语句。

      2) 在您的 SQL 中使用数据库名称(即SELECT dbname.tablename.colname FROM dbname.tablename...)完全指定表名称。打开连接而不指定要使用的数据库通常仅在构建与多个数据库一起使用的工具时有用,例如 GUI 数据库管理器。

      更多详情请参考以下mysql门户。

      https://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 2015-11-26
        • 2016-07-24
        • 2011-06-16
        • 2010-12-07
        • 1970-01-01
        • 2013-04-29
        相关资源
        最近更新 更多