使用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 获取更新(update)记录的id之<selectKey>用法说明
这篇文章主要介绍了mybatis 获取更新(update)记录的id之<selectKey>用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-05-05
第一次使用Android Studio时你应该知道的一切配置(推荐)
这篇文章主要介绍了第一次使用Android Studio时你应该知道的一切配置(推荐) ,需要的朋友可以参考下2017-09-09
MyBatisPlus PaginationInterceptor分页插件的使用详解
这篇文章主要介绍了MyBatisPlus PaginationInterceptor分页插件的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-03-03


最新评论