通过反射+注解+JDBC创建数据库表

反射+注解+JDBC创建数据库表

本次实例我们讲解一个数据库框架的小案例,这里我只写了一个功能,还有关其他数据库操作的功能我会再后面填写上。

功能介绍:

通常我们对数据库进行操作时,都需要创建一个表,在没有使用反射和注解的时候,我们事先是已经将sql语句写好
了的,然后直接调用对应的执行语句就可以创建我们的表了,如果我们想再添加一个表是不是要去修改一下自己提前
已经写好的sql语句呢,然后确定表中的某些字段后把它创建好,有时候你会不会觉得每个表中的字段又不同,然后
又要修改字段呢?这样是不是会觉得很麻烦呢,为了解决这种麻烦的事,那么我们只要灵活的运用反射和注解就能很
好的解决这个问题。

一般来说,为了方便我们能不再那么麻烦的频繁修改语句来创建表,思路如下:

  • 一般来说我们每个表都可以对应一个实体,每个表中的字段基本是和我们的实体依依对应的,所以我们需要创建什么表就先定义好实体对象,比如学生表,定义学生对象,老师表,定义老师对象等
  • 通过反射拿到每个对象对应注解的值,和其每个字段,然后拼成对应的创建表语句,执行就好了

话不多说,下面开始上代码
Utils包中的Utils.java类:

public class Utils {
   
    //数据库连接对象
    private static Connection connection;
    //数据库路径
    private static final String DBPATH = "C:\\Users\\13718\\student.db"
    /**
     * 获取数据库的连接
     *
     * @return
     */
    public static Connection getConnection() {
        if (connection != null)
            return connection;
        try {
            //加载类驱动
            Class.forName("org.sqlite.JDBC");
            //获取连接
            connection = DriverManager.getConnection("jdbc:sqlite:" + DBPATH);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

    /**
     * 获取实体包中的对应要创建表的所有对象实例
     * 具体实现是,通过I/O的方式访问一个包中的所有java文件
     * 然后加载每个类,保存到集合中
     * @return
     * @throws Exception
     */
    public static List<Object> getTablesNum() throws Exception {
        List<Object> lst = new ArrayList<>();
        File file = new File("SqlCreateTable/src/com/company/bean");
        if (!file.exists())
            return null;
        //这里采用了lambda表达式来过滤对应的文件
        File[] files = file.listFiles((s) -> {
            return s.getName().endsWith(".java");
        });
        if (files == null) return null;
        for(File f : files){
            String[] name = f.getName().split("\\.java");
            Class<? extends Object> clazz = Class.forName("com.company.bean."+name[0]);
            Object o = clazz.newInstance();
            if(clazz != null)
                lst.add(o);
        }
        
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值