使用Java生成MySQL数据库

Java 动态生成 MYsql 数据库

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

java 复制代码
/*
  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 开启一个事务,也就是不会自动提交。

java 复制代码
// 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 方法执行,由于我们开启了事务,最后提交事务才能完成创建。

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

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

java 复制代码
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);

切换到刚刚的数据库

java 复制代码
// 切换到数据库
conn.setCatalog(tenantDatabase);

执行 SQL 脚本

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

java 复制代码
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();

小技巧

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

java 复制代码
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);
相关推荐
量化分析码农几秒前
【Python量化数据工程实战 #01】拉下来的行情全是"脏数据"?停牌、跳空、异常值一站式清洗
后端
专业程序开发源2 分钟前
springboot篮球联赛管理系统13635-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·php·课程设计
StevenLdh19 分钟前
第四期 · 云端同步与冲突仲裁:离线可写、多端一致的工程解法
java·微信小程序
事已至此先睡覺吧29 分钟前
第三篇:Java 流程控制详解:条件判断、循环与跳转语句
java·开发语言
毕业设计70331 分钟前
(免费领源码) SpringBoot 游戏交易平台17600-java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
java·spring boot·mysql·决策树·mybatis·idea·推荐算法
一 乐38 分钟前
自习室座位预约管理系统|基于springboot + vue自习室座位预约管理系统(源码+数据库+文档)
java·vue.js·spring boot
行百里er39 分钟前
轻量级 Spring 监测工具——Spring Insight 发布了
spring boot·后端·监控
此时不提桶,更待何时1 小时前
02-02-B-AQS与JUC锁面试与生产事故实战
java
音符犹如代码1 小时前
Kafka 接入 AI 的三条路线:MCP 提案、会话记忆与实时上下文
java·大数据·ai·kafka
vx_BS813301 小时前
【项目编号:project51629】Spring Boot 乡村自来水缴费系统:把抄表、水费生成与在线缴费做成一条数字化闭环
java·spring boot·eclipse·tomcat·maven