Day5_2--学生信息管理系统数据持久化改造(德鲁伊)

本次主要是利用自己封装好的,jdbc连接工具实现对数据库数据的增删改查(也就是数据持久化)
功能展示
在下面给出的是主要代码,数据库中对应的两张表的实体类代码没有给出!
jdbc工具封装代码如下:

package stuifo.Tools;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.commons.beanutils.BeanUtils;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.sql.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;

public class jdbcTool {
    public static Connection conn;
    public static PreparedStatement stmt;
    public static ResultSet rs;
    public static DataSource dataSource;

    static {
        InputStream resourceAsStream = jdbcTool.class.getClassLoader().getResourceAsStream("jdbc.properties");
        Properties properties = new Properties();
        //加载流文件
        try {
            properties.load(resourceAsStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //获取德鲁伊配置
        try {
            dataSource = DruidDataSourceFactory.createDataSource(properties);
            conn = dataSource.getConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }
        //关闭文件流
        if (resourceAsStream != null) {
            try {
                resourceAsStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 获取预处理对象
     * @param sql 调用方法传过来
     * @param parameters 调用方法传过来
     * @return
     * @throws SQLException
     */

    public static PreparedStatement getPreparedStatement(String sql, Object... parameters) throws SQLException {
        stmt = conn.prepareStatement(sql);
        ParameterMetaData parameterMetaData = stmt.getParameterMetaData();
        int count = parameterMetaData.getParameterCount();
        if (count != 0 && parameters != null && parameters.length == count)
            for (int i = 0; i < count; i++) {
                stmt.setObject(i + 1, parameters[i]);
            }
        return stmt;
    }

    /**
     * 用于关闭Connection、PreparedStatement、ResultSet资源
     * @param resources
     */

    public static void closeAll(AutoCloseable... resources) {
        if (resources != null && resources.length > 0) {
            Arrays.stream(resources).forEach(source -> {
                if (source != null) {
                    try {
                        source.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }

    /**
     * 增加、删除、更新操作
     * @param sql  按需求传参数
     * @param parameters 设置sql中的?
     * @return
     * @throws SQLException
     */

    public static int cru(String sql, Object... parameters) throws SQLException {
        stmt = getPreparedStatement(sql, parameters);
        int i = stmt.executeUpdate();
           jdbcTool.closeAll(stmt, rs);
        return i;
    }

    /**
     * 查询操作
     * @param sql
     * @param parameters
     * @return
     * @param <T>
     * @throws SQLException
     * @throws InstantiationException
     * @throws IllegalAccessException
     * @throws InvocationTargetException
     */

    public static <T> List<T> select(String sql, Class<T> cls,Object... parameters) throws SQLException, InstantiationException, IllegalAccessException, InvocationTargetException, ClassNotFoundException {
        ArrayList<T> arrayList = new ArrayList<>();
//        String table = sql.split("")[3];
//        Class<?> cls = Class.forName(table);
        T t = null;
        stmt = jdbcTool.getPreparedStatement(sql, parameters);
        rs = stmt.executeQuery();
        ResultSetMetaData metaData = rs.getMetaData();
        int count = metaData.getColumnCount();
        while (rs.next()) {
           t = cls.newInstance();//实例化一个bean的空对象,用来封装数据
            for (int i = 1; i <= count; i++) {
                BeanUtils.setProperty(t, metaData.getColumnName(i), rs.getObject(i));
            }
            arrayList.add(t);
        }
        jdbcTool.closeAll(stmt, rs);
        return arrayList;
    }
}

项目入口代码如下:

package stuifo;


import stuifo.Model.admin;
import stuifo.Tools.codeTool;
import stuifo.Tools.jdbcTool;
import stuifo.UserView.UserUi;

import java.util.List;
import java.util.Scanner;

public class StudentRun {
    public static void main(String[] args) throws Exception {
        System.out.println("--------------------------------------");
        System.out.println("**欢迎使用学生信息管理系统***");
        System.out.println("--------------------------------------");

        System.out.println("----请输入管理员的账号和密码进行登陆:-----");
        Scanner scanner = new Scanner(System.in);
        System.out.print("账号|:");
        String user = scanner.next();
        System.out.print("密码|:");
        String pw = scanner.next();
        String code = codeTool.code();
        System.out.print("验证码(" + code + ")|:");
        String userCode = scanner.next();


        if (!userCode.equals(code)) {
            System.out.println("验证码错误");
        } else if (checkLogin(user, pw)) {
            System.out.println("*****请选择你的业务操作******");
            //生成操作界面   用户表现层
            UserUi useUi = new UserUi();
            useUi.UI();
        } else {
            System.out.println("账号或密码错误!");
        }
    }

    public static boolean checkLogin(String user, String pw) throws Exception {
        List<admin> login = jdbcTool.select("select * from admin where username = ? AND password = ?", admin.class, user, pw);
        if (login.size() > 0) {
            return true;
        } else return false;
    }
}

业务实现代码如下:

package stuifo.UserView;


import stuifo.Tools.jdbcTool;
import stuifo.Model.student;

import java.util.List;
import java.util.Scanner;

/**
 * 表现层
 */
public class UserUi {
    public static int num = 0;
    public static int num1 = 0;
    public static int id = 1;

    public void UI() throws Exception {
        jdbcTool jt = new jdbcTool();
        boolean flag = true;
        while (flag) {
            System.out.println("1.查询所有学生信息");
            System.out.println("2.添加学生信息");
            System.out.println("3.删除学生信息");
            System.out.println("4.修改学生信息");
            System.out.println("5.查找学生信息");
            System.out.println("0.退出系统");

            Scanner scanner = null;
            int num = 0;

            while (true) {
                try {
                    UserUi.num1 = 0;

                    System.out.println("请输入你的业务数字");
                    scanner = new Scanner(System.in);
                    num = scanner.nextInt();
                    break;
                } catch (Exception e) {
                    System.out.println("请输入正确的业务数字!");
                }
            }

            switch (num) {
                case 1: {
                    List<student> stu = jt.select("select * from student", student.class);
                    for (student o : stu) {
                        System.out.println(o);
                    }
                    System.out.println("成功查询" + stu.size() + "条数据");
                }
                break;
                case 2: {
                    System.out.println("请输入学号:");
                    int sno = scanner.nextInt();
                    System.out.println("请输入姓名:");
                    String name = scanner.next();
                    System.out.println("请输入性别:");
                    String sex = scanner.next();
                    System.out.println("请输入年龄:");
                    int age = scanner.nextInt();
                    System.out.println("请输入专业:");
                    String major = scanner.next();
                    System.out.println("成功插入" + jt.cru("insert into student values(?,?,?,?,?)", sno, name, sex, age, major) + "条数据");
                }

                break;
                case 3: {
                    System.out.println("请输入要删除的学号:");
                    int sno = scanner.nextInt();
                    int i = jt.cru("delete from student where sno=?", sno);
                    if (i > 0) {
                        System.out.println("成功删除" + i + "条数据");
                    } else System.out.println("信息不存在");

                }
                break;
                case 4: {
                    System.out.println("请输入要修改的学号:");
                    int sno = scanner.nextInt();
                    List<student> stu = jt.select("select * from student where sno=?", student.class, sno);
                    if (stu.size()>0) {
                        for (student o : stu) {
                            System.out.println(o);
                        }
                        System.out.println("请输入要转入的专业:");
                        String major = scanner.next();
                        jt.cru("update student set major=? where sno=?",major,sno);
                        System.out.println("成功修改" + stu.size() + "条数据");
                    } else System.out.println("信息不存在!");
                }
                break;
                case 5: {
                    System.out.println("请输入要查找的姓名:");
                    String name = scanner.next();
                    List<student> stu = jt.select("select * from student where name=?", student.class, name);
                    if (stu.size() > 0) {
                        for (student o : stu) {
                            System.out.println(o);
                        }
                        System.out.println("查询到" + stu.size() + "条数据");
                    } else System.out.println("信息不存在!");
                }
                break;

                case 0:
                    System.out.println("退出系统");
                    flag = false;
                    break;
            }
        }
    }
}

这里放一个自己写的生成验证码的工具:

package stuifo.Tools;

import java.util.Random;

public class codeTool {
    public static String code() {
        String res = "";
        char[] str = {'1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'A', 'b', 'B', 'c', 'd', 'F'};
        Random random = new Random();

        for (int i = 0; i < 4; i++) {
            int anInt = random.nextInt(16);
            res += str[anInt];
        }
        return res;
    }
}

整个项目代码在我的gitee上有上传,看主页自取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT ·南栀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值