JFinal使用技巧-动态建库

RT
马上下班五一了, @zz210891470 你这样@ 我不好23333  我写在这里吧,如果还有其他人问的话, 很简单的。

  1. public class Db_CREATE {
  2.  
  3.     public static void main(String[] args) {
  4.         DruidPlugin druidPlugin = new DruidPlugin(
  5.                 "jdbc:mysql://127.0.0.1:3306/information_schema?characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull",
  6.                 "root", "").set(1, 1, 100);
  7.         ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
  8.         // 启动管理库
  9.         druidPlugin.start();
  10.         arp.start();
  11.  
  12.         String name = "test_1";
  13.         // 建库
  14.         Db.update("CREATE DATABASE " + name);
  15.  
  16.         // 启动业务库
  17.         DruidPlugin druidPluginTest = new DruidPlugin("jdbc:mysql://127.0.0.1:3306/" + name
  18.                 + "?characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull",
  19.                 "root", "").set(1, 1, 100);
  20.         ActiveRecordPlugin arpTest = new ActiveRecordPlugin(name, druidPluginTest);
  21.         druidPluginTest.start();
  22.         arpTest.start();
  23.         // 建表
  24.         DbPro testDb = Db.use(name);
  25.         testDb.update(
  26.                 "CREATE TABLE `a` ( `id`  int NOT NULL AUTO_INCREMENT , `xx`  varchar(255) NULL , PRIMARY KEY (`id`) ) ");
  27.         // 写入数据
  28.         testDb.update("INSERT INTO `a` (`xx`) VALUES ('xxxxx')");
  29.         // 查询
  30.         List<Record> list = testDb.find("SELECT * FROM `a` LIMIT 100");
  31.         System.out.println(list.toString());
  32.  
  33.         arpTest.stop();
  34.         druidPluginTest.stop();
  35.         arp.stop();
  36.         druidPlugin.stop();
  37.     }
  38.  
  39. }

注意要使用 有权限的账户 才能建库, 比如 root 账户。 有用就点个赞

评论区

JFinal

2019-04-30 17:35

没想到还真能动态创建 database,自此建库、建表、建字段、改字段,完全动态化了,超赞

琴海森林

2019-04-30 17:42

这个好,先收藏了

杜福忠

2019-04-30 17:46

@JFinal 以前学习EOVA @Jieven 老师的项目,了解了MySQL的information_schema数据库。以及里面的:
SCHEMATA表
---SCHEMATA表提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
TABLES表
---TABLES表提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间,等等信息。是show tables from schemaname的结果取之此表。

这两个表, 根据这两个表, 就能比对数据库的差异。 根据差异生成对应SQL。就能做到为平台多租户的SaaS客户实现全库升级。轻轻松松实现上百个库同时升级。而ActiveRecordPlugin天然支持任何连接,不限制是否是一台机器,也就支持了操作集群数据库的骚操作了

杜福忠

2019-04-30 17:59

@琴海森林 就佩服你们做开源项目的人, 要付出太多太多时间和精力去维护这个项目。我就写写短篇分享划划水了

JFinal

2019-04-30 18:19

@杜福忠 这种用法,适合十分灵活的应用,eova 这个项目极其动态化,全程 Db + Record,连 Model 都没使用

感谢分享

lyh061619

2019-05-01 22:01

@JFinal 呵呵,我的项目商业也是全程Db+Record的连Model都没有使用到过。

zz210891470

2019-05-04 09:22

感谢 好文章

小徐同学

2019-05-05 09:10

yang1995

2019-05-07 13:37

postgresql 错误: CREATE DATABASE 无法在事物块中运行 什么原因呢

杜福忠

2019-05-07 13:57

@yang1995 postgresql没有使用过,你开启事务了 ?先用 DEMO跑通了再放业务里试试。

yang1995

2019-05-08 09:44

@杜福忠 可以了,换个方法调用一下就好了,谢谢

热门分享

扫码入社