SpringBoot下Java动态创建表和表字段

本文介绍了如何在SpringBoot项目中动态创建MySQL数据库表。首先,代码展示了在已有数据库下创建表的过程,接着讨论了如何接收前端传来的表结构信息,将这些信息处理后用于动态建表。通过示例代码,演示了从字符串数组中解析表结构并执行创建表的逻辑,最终展示执行结果。
部署运行你感兴趣的模型镜像

场景:网上看到一个项目在线生成表结构,感觉这样很方便,能够节省很大的人工,也想做一个这样的项目,先尝试着写了个测试类,后续再找前端继续完善

我这边动态创建的前提是有一个存在的数据库,代码如下:

Class.forName("com.mysql.jdbc.Driver");        //创建连接        String url = "jdbc:mysql://172.16.10.54:3306/jeemp?useUnicode=true&characterEncoding=UTF-8" +                "&verifyServerCertificate=false&useSSL=false";        Connection conn = DriverManager.getConnection(url, "root", "root");        Statement stat = conn.createStatement();        String creatsql = "CREATE TABLE hello( "                + " id int(4) not null ,"                + " hname varchar(10) not null "                + " ) charset=utf8; ";        //获取数据库表名        ResultSet rs = conn.getMetaData().getTables(null, null, "hello", null);        // 判断表是否存在,如果存在则什么都不做,否则创建表        if(!rs.next() ){            stat.executeLargeUpdate(creatsql);        }

然后进行插入数据和查看数据

//添加数据        stat.executeUpdate(" insert into hello values(1,'JackRen') ");        stat.executeUpdate("insertinto hello values(1,'张三') ");        //查询数据        ResultSet result = stat.executeQuery("select * from hello");        while (result.next()) {            System.out.println(result.getInt("id") + "" + result.getString("hname"));        }

最后别忘了要关闭数据库连接

//关闭数据库        result.close();        stat.close();        conn.close();

我们试想下,如果我想要表名和表中的字段都是从前端传入到后台,后台拿到后进行处理,然后再写入数据库。想到这就开始做吧,我们先做理想情况下,前端拼接好的数据是一个字符串,放入到数组中,画个简图:

修改下原有代码:

/*     * 动态创建表字段     * @author JackRen     * @date 2021/2/24     * @return     **/    private static void dynamicCreateTableFileds(String table,List<String> fileds) throws Exception{        Class.forName("com.mysql.jdbc.Driver");        //一开始必须必填一个已经存在的数据库        String url = "jdbc:mysql://172.16.10.54:3306/jeemp?useUnicode=true&characterEncoding=UTF-8" +                "&verifyServerCertificate=false&useSSL=false";        Connection conn = DriverManager.getConnection(url, "root", "root");        Statement stat = conn.createStatement();        String sql =  "CREATE TABLE "+table+"(";        for (String str:fileds) {            sql = sql+str;        }        sql = sql + " ) charset=utf8; ";        //获取数据库表名        ResultSet rs = conn.getMetaData().getTables(null, null, table, null);        // 判断表是否存在,如果存在则什么都不做,否则创建表        if(!rs.next() ){            stat.executeLargeUpdate(sql);        }        //添加数据        stat.executeUpdate(" insert into "+table+" values(1,'JackRen') ");        stat.executeUpdate(" insert into "+table+" values(1,'昊天') ");        //查询数据        ResultSet result = stat.executeQuery("select * from "+table);        while (result.next()) {            System.out.println(result.getInt("id") + " " + result.getString("hname"));        }        //关闭数据库        result.close();        stat.close();        conn.close();    }

执行程序入口:

public static void main(String[] args) throws Exception{        List<String> fileds = new ArrayList<>();        fileds.add(" id int(4) not null ,");        fileds.add(" hname varchar(10) not null ");        dynamicCreateTableFileds("test",fileds);    }

执行结果:

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值