亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用Java實(shí)現(xiàn)動(dòng)態(tài)生成MySQL數(shù)據(jù)庫(kù)

 更新時(shí)間:2024年02月18日 08:17:39   作者:哪里的破水瓶  
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)動(dòng)態(tài)生成MySQL數(shù)據(jù)庫(kù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

Java 動(dòng)態(tài)生成 MYsql 數(shù)據(jù)庫(kù)

首先準(zhǔn)備一個(gè)類,表示用于生成數(shù)據(jù)庫(kù)等操作。

/*
  TenantDatabaseDTO 用于傳遞租戶數(shù)據(jù)庫(kù)相關(guān)的信息。
 */
public class TenantDatabaseDTO {
    // 數(shù)據(jù)庫(kù)名稱
    private String tenantDatabase;
    // 數(shù)據(jù)庫(kù)用戶
    private String dbUser;
    // 數(shù)據(jù)庫(kù)密碼
    private String dbPass;
    // 管理員名稱
    private String adminName;
    // 管理員密碼
    private String adminPass;
    // 名稱
    private String tenantName;
    // 數(shù)據(jù)庫(kù)連接 URL
    private String url;
}

接下來(lái)我們開始連接數(shù)據(jù)庫(kù)操作

我們首先創(chuàng)建數(shù)據(jù)庫(kù)連接,Statement 是執(zhí)行語(yǔ)句對(duì)象,用于執(zhí)行 sql,Connection 是連接對(duì)象,可以通過(guò) setAutoCommit 開啟一個(gè)事務(wù),也就是不會(huì)自動(dòng)提交。

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

// 數(shù)據(jù)庫(kù)賬戶密碼
String username = "root";
String password = "1234";

// 獲取數(shù)據(jù)庫(kù)連接
Connection conn = DriverManager.getConnection(url, username, password);
// 執(zhí)行語(yǔ)句對(duì)象
Statement stmt = null;
// 關(guān)閉自動(dòng)提交事務(wù)
conn.setAutoCommit(false);
// 創(chuàng)建執(zhí)行語(yǔ)句對(duì)象
stmt = conn.createStatement();

創(chuàng)建數(shù)據(jù)庫(kù)

我們拼接一個(gè) SQL 用于創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),通過(guò)執(zhí)行語(yǔ)句的 execute 方法執(zhí)行,由于我們開啟了事務(wù),最后提交事務(wù)才能完成創(chuàng)建。

// 數(shù)據(jù)庫(kù)名稱
String database = "newDataBase";
// 創(chuàng)建庫(kù)
String createDatabaseSQL = "CREATE DATABASE IF NOT EXISTS `" + database + "` DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;";
// 執(zhí)行語(yǔ)句
stmt.execute(createDatabaseSQL);

這里由于我的業(yè)務(wù)需要給特定的數(shù)據(jù)庫(kù)做專門的賬戶密碼,所以下面需要再次執(zhí)行兩個(gè),創(chuàng)建用戶以及分配該數(shù)據(jù)的權(quán)限

String databasePassword = "1234";
// 在這里要?jiǎng)?chuàng)建用戶,并且存入相應(yīng)用戶和密碼
String userSQL = "CREATE USER '" + database + "'@'localhost' IDENTIFIED BY '" + databasePassword + "';";
stmt.execute(userSQL);

//用戶授權(quán)
String grantSQL = "GRANT select, insert, update, delete ON " + database + ".* TO '" + database + "'@'localhost'";
stmt.execute(grantSQL);

切換到剛剛的數(shù)據(jù)庫(kù)

// 切換到數(shù)據(jù)庫(kù)
conn.setCatalog(tenantDatabase);

執(zhí)行 SQL 腳本

ScriptRunner 類用于執(zhí)行SQL腳本,需要和數(shù)據(jù)庫(kù)連接 Connection 一起使用。因?yàn)樾枰獋鬟f連接器。

ScriptRunner runner = new ScriptRunner(connection);
// 禁用一般日志
runner.setLogWriter(null);
// 禁用錯(cuò)誤日志
runner.setErrorLogWriter(null);
// 從資源中獲取 SQL 腳本的 Reader,位于 resources 目錄下 init-sql-script下的文件,讀取之后并執(zhí)行。
Reader reader = Resources.getResourceAsReader("init-sql-script/erp-crm-tenant-sample.sql");
// 最后記得將事務(wù)提交
conn.commit();

小技巧

這樣也可以更好的提交數(shù)據(jù)。

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);

到此這篇關(guān)于使用Java實(shí)現(xiàn)動(dòng)態(tài)生成MySQL數(shù)據(jù)庫(kù)的文章就介紹到這了,更多相關(guān)Java生成MySQL數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis水平分表實(shí)現(xiàn)動(dòng)態(tài)表名的項(xiàng)目實(shí)例

    mybatis水平分表實(shí)現(xiàn)動(dòng)態(tài)表名的項(xiàng)目實(shí)例

    本文主要介紹了mybatis水平分表實(shí)現(xiàn)動(dòng)態(tài)表名的項(xiàng)目實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java實(shí)現(xiàn)拆箱和裝箱的原理解析

    Java實(shí)現(xiàn)拆箱和裝箱的原理解析

    Java 是一種強(qiáng)類型語(yǔ)言,然而在 Java中Integer類型和 int類型兩種不同類型的數(shù)字卻能正常地進(jìn)行數(shù)學(xué)運(yùn)算,為什么?今天我們就來(lái)聊聊其背后的秘密:拆箱和裝箱,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2024-05-05
  • mybatis?獲取更新(update)記錄的id之<selectKey>用法說(shuō)明

    mybatis?獲取更新(update)記錄的id之<selectKey>用法說(shuō)明

    這篇文章主要介紹了mybatis?獲取更新(update)記錄的id之<selectKey>用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Dubbo+zookeeper搭配分布式服務(wù)的過(guò)程詳解

    Dubbo+zookeeper搭配分布式服務(wù)的過(guò)程詳解

    Dubbo作為分布式架構(gòu)比較后的框架,同時(shí)也是比較容易入手的框架,適合作為分布式的入手框架,下面是簡(jiǎn)單的搭建過(guò)程,對(duì)Dubbo+zookeeper分布式服務(wù)搭建過(guò)程感興趣的朋友一起看看吧
    2022-04-04
  • java基礎(chǔ)的詳細(xì)了解第二天

    java基礎(chǔ)的詳細(xì)了解第二天

    這篇文章對(duì)Java編程語(yǔ)言的基礎(chǔ)知識(shí)作了一個(gè)較為全面的匯總,在這里給大家分享一下。需要的朋友可以參考,希望能給你帶來(lái)幫助
    2021-08-08
  • 第一次使用Android Studio時(shí)你應(yīng)該知道的一切配置(推薦)

    第一次使用Android Studio時(shí)你應(yīng)該知道的一切配置(推薦)

    這篇文章主要介紹了第一次使用Android Studio時(shí)你應(yīng)該知道的一切配置(推薦) ,需要的朋友可以參考下
    2017-09-09
  • 解決Spring中@Value注解取值為null問(wèn)題

    解決Spring中@Value注解取值為null問(wèn)題

    近期應(yīng)用中因業(yè)務(wù)迭代需要接入 user 客戶端,接入后總是啟動(dòng)失敗,報(bào)注冊(cè) user bean 依賴的配置屬性為 null,所以接下來(lái)小編就和大家一起排查分析這個(gè)問(wèn)題,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2023-08-08
  • MyBatisPlus PaginationInterceptor分頁(yè)插件的使用詳解

    MyBatisPlus PaginationInterceptor分頁(yè)插件的使用詳解

    這篇文章主要介紹了MyBatisPlus PaginationInterceptor分頁(yè)插件的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Spring?Boot?如何正確讀取配置文件屬性

    Spring?Boot?如何正確讀取配置文件屬性

    這篇文章主要介紹了Spring?Boot?如何正確讀取配置文件屬性,項(xiàng)目中經(jīng)常會(huì)經(jīng)常讀取配置文件中的屬性的值,Spring?Boot提供了很多注解讀取配置文件屬性,那么如何正確使用呢,下文一起來(lái)參考下面文章內(nèi)容吧
    2022-04-04
  • springmvc Rest風(fēng)格介紹及實(shí)現(xiàn)代碼示例

    springmvc Rest風(fēng)格介紹及實(shí)現(xiàn)代碼示例

    這篇文章主要介紹了springmvc Rest風(fēng)格介紹及實(shí)現(xiàn)代碼示例,rest風(fēng)格簡(jiǎn)潔,分享了HiddenHttpMethodFilter 的源碼,通過(guò)Spring4.0實(shí)現(xiàn)rest風(fēng)格源碼及簡(jiǎn)單錯(cuò)誤分析,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11

最新評(píng)論