使用Java实现动态生成MySQL数据库

 更新时间:2024年02月18日 08:17:39   作者:哪里的破水瓶  
这篇文章主要为大家详细介绍了如何使用Java实现动态生成MySQL数据库,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

Java 动态生成 MYsql 数据库

首先准备一个类,表示用于生成数据库等操作。

/*
  TenantDatabaseDTO 用于传递租户数据库相关的信息。
 */
public class TenantDatabaseDTO {
    // 数据库名称
    private String tenantDatabase;
    // 数据库用户
    private String dbUser;
    // 数据库密码
    private String dbPass;
    // 管理员名称
    private String adminName;
    // 管理员密码
    private String adminPass;
    // 名称
    private String tenantName;
    // 数据库连接 URL
    private String url;
}

接下来我们开始连接数据库操作

我们首先创建数据库连接,Statement 是执行语句对象,用于执行 sql,Connection 是连接对象,可以通过 setAutoCommit 开启一个事务,也就是不会自动提交。

// url
String url = "jdbc:mysql://" + host + ":" + port + "/";

// 数据库账户密码
String username = "root";
String password = "1234";

// 获取数据库连接
Connection conn = DriverManager.getConnection(url, username, password);
// 执行语句对象
Statement stmt = null;
// 关闭自动提交事务
conn.setAutoCommit(false);
// 创建执行语句对象
stmt = conn.createStatement();

创建数据库

我们拼接一个 SQL 用于创建一个数据库,通过执行语句的 execute 方法执行,由于我们开启了事务,最后提交事务才能完成创建。

// 数据库名称
String database = "newDataBase";
// 创建库
String createDatabaseSQL = "CREATE DATABASE IF NOT EXISTS `" + database + "` DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;";
// 执行语句
stmt.execute(createDatabaseSQL);

这里由于我的业务需要给特定的数据库做专门的账户密码,所以下面需要再次执行两个,创建用户以及分配该数据的权限

String databasePassword = "1234";
// 在这里要创建用户,并且存入相应用户和密码
String userSQL = "CREATE USER '" + database + "'@'localhost' IDENTIFIED BY '" + databasePassword + "';";
stmt.execute(userSQL);

//用户授权
String grantSQL = "GRANT select, insert, update, delete ON " + database + ".* TO '" + database + "'@'localhost'";
stmt.execute(grantSQL);

切换到刚刚的数据库

// 切换到数据库
conn.setCatalog(tenantDatabase);

执行 SQL 脚本

ScriptRunner 类用于执行SQL脚本,需要和数据库连接 Connection 一起使用。因为需要传递连接器。

ScriptRunner runner = new ScriptRunner(connection);
// 禁用一般日志
runner.setLogWriter(null);
// 禁用错误日志
runner.setErrorLogWriter(null);
// 从资源中获取 SQL 脚本的 Reader,位于 resources 目录下 init-sql-script下的文件,读取之后并执行。
Reader reader = Resources.getResourceAsReader("init-sql-script/erp-crm-tenant-sample.sql");
// 最后记得将事务提交
conn.commit();

小技巧

这样也可以更好的提交数据。

SqlRunner sqlRunner = new SqlRunner(conn);
//插入部门
String insertSql = "INSERT INTO sys_dept VALUES (100, 0, '0', '" + tenantDatabaseDTO.getTenantName() + "', 0, '" + tenantDatabaseDTO.getTenantName() + "', '00000000000', 'admin@admin.com', '0', '0', 'admin', '" + DateUtils.getTime() + "', 'admin', '" + DateUtils.getTime() + "');";
sqlRunner.run(insertSql);

到此这篇关于使用Java实现动态生成MySQL数据库的文章就介绍到这了,更多相关Java生成MySQL数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mybatis水平分表实现动态表名的项目实例

    mybatis水平分表实现动态表名的项目实例

    本文主要介绍了mybatis水平分表实现动态表名的项目实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Java实现拆箱和装箱的原理解析

    Java实现拆箱和装箱的原理解析

    Java 是一种强类型语言,然而在 Java中Integer类型和 int类型两种不同类型的数字却能正常地进行数学运算,为什么?今天我们就来聊聊其背后的秘密:拆箱和装箱,感兴趣的小伙伴跟着小编一起来看看吧
    2024-05-05
  • mybatis 获取更新(update)记录的id之<selectKey>用法说明

    mybatis 获取更新(update)记录的id之<selectKey>用法说明

    这篇文章主要介绍了mybatis 获取更新(update)记录的id之<selectKey>用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Dubbo+zookeeper搭配分布式服务的过程详解

    Dubbo+zookeeper搭配分布式服务的过程详解

    Dubbo作为分布式架构比较后的框架,同时也是比较容易入手的框架,适合作为分布式的入手框架,下面是简单的搭建过程,对Dubbo+zookeeper分布式服务搭建过程感兴趣的朋友一起看看吧
    2022-04-04
  • java基础的详细了解第二天

    java基础的详细了解第二天

    这篇文章对Java编程语言的基础知识作了一个较为全面的汇总,在这里给大家分享一下。需要的朋友可以参考,希望能给你带来帮助
    2021-08-08
  • 第一次使用Android Studio时你应该知道的一切配置(推荐)

    第一次使用Android Studio时你应该知道的一切配置(推荐)

    这篇文章主要介绍了第一次使用Android Studio时你应该知道的一切配置(推荐) ,需要的朋友可以参考下
    2017-09-09
  • 解决Spring中@Value注解取值为null问题

    解决Spring中@Value注解取值为null问题

    近期应用中因业务迭代需要接入 user 客户端,接入后总是启动失败,报注册 user bean 依赖的配置属性为 null,所以接下来小编就和大家一起排查分析这个问题,感兴趣的小伙伴跟着小编一起来看看吧
    2023-08-08
  • MyBatisPlus PaginationInterceptor分页插件的使用详解

    MyBatisPlus PaginationInterceptor分页插件的使用详解

    这篇文章主要介绍了MyBatisPlus PaginationInterceptor分页插件的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Spring Boot 如何正确读取配置文件属性

    Spring Boot 如何正确读取配置文件属性

    这篇文章主要介绍了Spring Boot 如何正确读取配置文件属性,项目中经常会经常读取配置文件中的属性的值,Spring Boot提供了很多注解读取配置文件属性,那么如何正确使用呢,下文一起来参考下面文章内容吧
    2022-04-04
  • springmvc Rest风格介绍及实现代码示例

    springmvc Rest风格介绍及实现代码示例

    这篇文章主要介绍了springmvc Rest风格介绍及实现代码示例,rest风格简洁,分享了HiddenHttpMethodFilter 的源码,通过Spring4.0实现rest风格源码及简单错误分析,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11

最新评论