JDBC--自己编写工具类从数据库中添删改查成绩

编写的工具类

public class DatabaseConnectivity {
    //返回数据库连接的方法,传入src目录下的配置文件名
  public   static Connection getConnection(String jdbcPropertiesName) throws IOException, ClassNotFoundException, SQLException {
        //获取数据库连接
        ClassLoader classLoader = prepare_statement.class.getClassLoader();
        //返回一个得到配置文件的流
        InputStream asStream = classLoader.getResourceAsStream(jdbcPropertiesName);
        Properties properties=new Properties();
        Connection connection = null;
        properties.load(asStream);
            //获取资源
        String url = properties.getProperty("url");
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String driverClass = properties.getProperty("DriverClass");
            //注册驱动
        Class.forName(driverClass);
            //获取连接
        connection = DriverManager.getConnection(url, user, password);

        asStream.close();
        return connection;
    }
    public static void releaseResources(Connection connection, Statement statement) throws SQLException {
        if (connection!=null){
            connection.close();
        }
        if(statement!=null){
            statement.close();
        }
    }
    //重载的关闭资源方法
    public static void releaseResources(Connection connection, Statement statement,ResultSet resultSet) throws SQLException {
      if (connection!=null){
          connection.close();
      }
      if(statement!=null){
          statement.close();
      }
      if(resultSet!=null){
          resultSet.close();
      }

    }
    //更新数据库的方法,增,删改
    public static int updateData(String jdbcPropertiesName,String sql,Object ...args) throws SQLException, IOException, ClassNotFoundException {
        int count=0;
        //获取连接
        Connection connection = getConnection(jdbcPropertiesName);
        //获取预编译的statement对象
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //填充占位符
        if(args.length!=0){
            for(int i=0;i<args.length;i++){
                preparedStatement.setObject(i+1,args[i]);
            }
        }
        //执行
        count = preparedStatement.executeUpdate();//返回影响的行数
        //关闭资源
        releaseResources(connection,preparedStatement);
        return count;
    }

//    通用的查询方法--针对于Customer表
    public static User selectOneUser(String sql,Object ...args)  {
        Connection connection=null;
        ResultSet resultSet=null;
        PreparedStatement preparedStatement=null;
        try {
            //获取数据库连接
            connection = getConnection("jdbc.properties");
            //获取预编译的statement接口对象
            preparedStatement = connection.prepareStatement(sql);
            //填充占位符
            for(int i=0;i<args.length;i++){
                preparedStatement.setObject(i+1,args[i]);
            }
            //获取执行的结果集
            resultSet = preparedStatement.executeQuery();
            //获取这个结果集的元数据:就是修饰这个结果集的数据(如列,列名等)
//        getMetaData()
//        检索此 ResultSet对象的列的数量,类型和属性。
            ResultSetMetaData metaData = resultSet.getMetaData();
            //获取列数
            int columnCount = metaData.getColumnCount();
//        当这个结果集有数据时
            if(resultSet.next()){
                //创建一个空参的user对象
                User user = new User();
                for(int i=1;i<=columnCount;i++){
                    //获取一个字段
                    Object object = resultSet.getObject(i);
                    //获取当前的列名
                    String columnName = metaData.getColumnName(i);
                    //通过反射,给对应属性赋值
                    Class<User> userClass = User.class;
                    Field declaredField = userClass.getDeclaredField(columnName);
                    //给获取到的属性赋值,将user对象套入当前模板,并赋值
                    declaredField.setAccessible(true);
                    declaredField.set(user,object);
                }

                return user;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        finally {
            //关闭资源
            try {
                releaseResources(connection,preparedStatement,resultSet);
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        return null;
    }
    //通用的针对Order表的查询,返回一个Order对象
    public static Order selectOneOrder(String sql,Object ...args)  {
        //针对于表的字段名与类的属性名不同的情况,
        //1、必须声明sql语句时,使用类的属性名来充当字段的别名
        //2、使用使用元数据时,需要使用getColumnLabel方法来获取别名,如果没有别名,则返回的是字段名
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try {
            //获取数据库连接
            connection = getConnection("jdbc.properties");
            //获取预编译的statement对象
            preparedStatement = connection.prepareStatement(sql);
            //填充占位符
            for(int i=0;i<args.length;i++){
                preparedStatement.setObject(i+1,args[i]);
            }
            //执行并返回结果集
            resultSet = preparedStatement.executeQuery();
            //获取结果集的元数据
            ResultSetMetaData metaData = resultSet.getMetaData();
            //获取列数
            int columnCount = metaData.getColumnCount();
            //将查询结果取出
            if(resultSet.next()){
                //创建一个空参的Order对象
                Order order = new Order();
                for(int i=1;i<=columnCount;i++){
                    //返回当前列属性值
                    Object object = resultSet.getObject(i);
                    //获取当前列的别名
                    String columnLabel = metaData.getColumnLabel(i);
                    //通过反射,给对应的属性赋值
                    Class<? extends Order> aClass = order.getClass();//返回一个类模板
                    Field declaredField = aClass.getDeclaredField(columnLabel);
                    declaredField.setAccessible(true);//除去私有权限
                    declaredField.set(order,object);//赋值

                }
                return order;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        finally {
            //关闭资源
            try {
                releaseResources(connection,preparedStatement,resultSet);
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        return null;
    }
    //通用的针对不同表的查询操作,通过传入的泛型参数来动态确定方法的返回值类型
    public static <T> T selectTables(Class<T> tClass,String sql,Object ...args){
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

        try {
            //获取数据库连接
            connection = getConnection("jdbc.properties");
            //获取预编译的statement对象
            preparedStatement = connection.prepareStatement(sql);
            //填充占位符
            for(int i=0;i<args.length;i++){
                preparedStatement.setObject(i+1,args[i]);
            }
            //执行并返回结果集
            resultSet = preparedStatement.executeQuery();
            //获取结果集的元数据
            ResultSetMetaData metaData = resultSet.getMetaData();
            //获取列数
            int columnCount = metaData.getColumnCount();
            //将查询结果取出
            if(resultSet.next()){
                //创建一个空参的T对象
                Constructor<T> constructor = tClass.getConstructor();
                T t = constructor.newInstance();//动态创建T类型的对象

                for(int i=1;i<=columnCount;i++){
                    //返回当前列属性值
                    Object object = resultSet.getObject(i);
                    //获取当前列的别名
                    String columnLabel = metaData.getColumnLabel(i);
                    //通过反射,给对应的属性赋值
                    Class<?> aClass = t.getClass();//返回一个类模板
                    Field declaredField = aClass.getDeclaredField(columnLabel);
                    declaredField.setAccessible(true);//除去私有权限
                    declaredField.set(t,object);//赋值

                }
                return t;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } finally {
            //关闭资源
            try {
                releaseResources(connection,preparedStatement,resultSet);
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        return null;

    }
//    查询任意表,返回多个对象的集合
public static <T> List<T> selectListTables(Class<T> tClass, String sql, Object ...args){
    Connection connection = null;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    try {
        //获取数据库连接
        connection = getConnection("jdbc.properties");
        //获取预编译的statement对象
        preparedStatement = connection.prepareStatement(sql);
        //填充占位符
        for(int i=0;i<args.length;i++){
            preparedStatement.setObject(i+1,args[i]);
        }
        //执行并返回结果集
        resultSet = preparedStatement.executeQuery();
        //获取结果集的元数据
        ResultSetMetaData metaData = resultSet.getMetaData();
        //获取列数
        int columnCount = metaData.getColumnCount();
        //存储对象的集合
        ArrayList<T> tList = new ArrayList<>();
        //将查询结果取出
        while (resultSet.next()){
            //创建一个空参的T对象
            Constructor<T> constructor = tClass.getConstructor();
            T t = constructor.newInstance();//动态创建T类型的对象

            for(int i=1;i<=columnCount;i++){
                //返回当前列属性值
                Object object = resultSet.getObject(i);
                //获取当前列的别名
                String columnLabel = metaData.getColumnLabel(i);
                //通过反射,给对应的属性赋值
                Class<?> aClass = t.getClass();//返回一个类模板
                Field declaredField = aClass.getDeclaredField(columnLabel);
                declaredField.setAccessible(true);//除去私有权限
                declaredField.set(t,object);//赋值

            }
            //将当前取出的对象存入集合
            tList.add(t);
        }
        return tList;
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException throwables) {
        throwables.printStackTrace();
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } finally {
        //关闭资源
        try {
            releaseResources(connection,preparedStatement,resultSet);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
      return null;
}
}

具体的操作

/**
 * @Classname JdbcPractice2
 * @author: 我心
 * @Description: 创建四六级成绩的添,查,删的方法,针对于examstudent表
 * @Date 2021/9/19 16:08
 * @Created by Lenovo
 */
public class JdbcPractice2 {
    //输入身份证号查询
    public ExamStudent selectIDCardGrade(String iDCard){
        String sql="SELECT FlowID AS 'flowID',Type AS 'type',IDCard iDCard,ExamCard examCard,StudentName studentName ,Location location,Grade grade FROM examstudent WHERE IDCard =?";
        ExamStudent examStudent = DatabaseConnectivity.selectTables(ExamStudent.class, sql, iDCard);
        return examStudent;
    }
    //输入准考证号查询
    public ExamStudent selectFlowGrade(String examCard){
        String sql="SELECT FlowID AS 'flowID',Type AS 'type',IDCard iDCard,ExamCard examCard,StudentName studentName ,Location location,Grade grade FROM examstudent WHERE ExamCard=?";
        ExamStudent examStudent = DatabaseConnectivity.selectTables(ExamStudent.class, sql, examCard);
        return examStudent;
    }
    //删除信息
    public int deleteMessage(ExamStudent examStudent) throws SQLException, IOException, ClassNotFoundException {
        int flowID = examStudent.getFlowID();
        String sql="DELETE FROM examstudent WHERE FlowID=?;";
        int i = DatabaseConnectivity.updateData("jdbc.properties", sql, examStudent.getFlowID());
        return i;

    }
    //添加成绩
    public int addMessage(ExamStudent examStudent) throws SQLException, IOException, ClassNotFoundException {
        String sql="INSERT INTO examstudent(FlowID,Type,IDCard,ExamCard,StudentName,Location,Grade) VALUES(?,?,?,?,?,?,?)";
        int i = DatabaseConnectivity.updateData("jdbc.properties", sql, examStudent.getFlowID(),
                examStudent.getType(), examStudent.getiDCard(), examStudent.getExamCard(),
                examStudent.getStudentName(), examStudent.getLocation(), examStudent.getGrade());
        return i;
    }
    public static void main(String[] args) throws Exception {
        JdbcPractice2 jdbcPractice2 = new JdbcPractice2();
        Scanner scanner = new Scanner(System.in);
        System.out.println("----------------------------查询四六级成绩----------------------------");
        System.out.println("请输入选择:");
        System.out.println("1.查询操作\n2.删除操作\n3.添加成绩");
        String option=scanner.nextLine();
        if (option.equals("1")) {
            System.out.println("a.准考证号\nb.身份证号");
            String s = scanner.nextLine();
            //a.准考证号
            if (s.equals("a")){
                System.out.print("输入您的准考证号:");
                String s1 = scanner.nextLine();
                ExamStudent examStudent = jdbcPractice2.selectFlowGrade(s1);
                if(examStudent==null){
                    throw new Exception("查无此人!");
                }
                System.out.println("------------------------查询结果------------------------");
                System.out.println("流水号:"+examStudent.getFlowID()+"\n四级/六级:"+examStudent.getType()+"\n身份证号:"+examStudent.getiDCard()+
                        "\n准考证号:"+examStudent.getExamCard()+"\n学生姓名:"+examStudent.getStudentName()+"\n区域:"+examStudent.getLocation()+
                        "\n成绩:"+examStudent.getGrade());
            }
            else if(s.equals("b")){
                System.out.print("输入您的身份证号:");
                String s2=scanner.nextLine();
                ExamStudent examStudent = jdbcPractice2.selectIDCardGrade(s2);
                if(examStudent==null){
                    throw new Exception("查无此人!");
                }
                System.out.println("------------------------查询结果------------------------");
                System.out.println("流水号:"+examStudent.getFlowID()+"\n四级/六级:"+examStudent.getType()+"\n身份证号:"+examStudent.getiDCard()+
                        "\n准考证号:"+examStudent.getExamCard()+"\n学生姓名:"+examStudent.getStudentName()+"\n区域:"+examStudent.getLocation()+
                        "\n成绩:"+examStudent.getGrade());
            }
            else throw new Exception("输入的选择不正确!");
        }
        //删除操作
        else if(option.equals("2")){
            System.out.println("-----------------------删除操作-----------------------");
            System.out.println("a.通过准考证号删除\nb.通过身份证号删除");
            String s3=scanner.nextLine();
            //a.通过准考证号删除
            if (s3.equals("a")){
                System.out.print("输入准考证号:");
                String num=scanner.nextLine();
                ExamStudent examStudent = jdbcPractice2.selectFlowGrade(num);
                System.out.println("要删除的学生信息");
                System.out.println(examStudent);
                System.out.println("确认删除?Y/N");
                String sure=scanner.nextLine();
                while (true) {
                    if (sure.equals("Y")||sure.equals("y")){
                        int i = jdbcPractice2.deleteMessage(examStudent);
                        if(i>0){
                            System.out.println("删除成功!");
                            break;
                        }
                    }
                    else if(sure.equals("n")||sure.equals("N")){
                        break;
                    }
                    else
                        continue;
                }

            }
            //b.通过身份证号删除
            else if(s3.equals("b")){
                System.out.print("输入身份证号:");
                String num=scanner.nextLine();
                ExamStudent examStudent = jdbcPractice2.selectIDCardGrade(num);
                System.out.println("要删除的学生信息");
                System.out.println(examStudent);
                System.out.println("确认删除?Y/N");
                String sure=scanner.nextLine();
                while (true) {
                    if (sure.equals("Y")||sure.equals("y")){
                        int i = jdbcPractice2.deleteMessage(examStudent);
                        if(i>0){
                            System.out.println("删除成功!");
                            break;
                        }
                    }
                    else if(sure.equals("n")||sure.equals("N")){
                        break;
                    }
                    else
                        continue;
                }
            }
            else {
                throw new Exception("请输入正确的选择!");
            }

        }
        //添加操作
        else if(option.equals("3")){
            System.out.println("-------------------添加成绩信息-------------------");
            System.out.print("Type(4/6):");
            String Type=scanner.nextLine();
            System.out.print("IDCard(身份证号):");
            String IDCard=scanner.nextLine();
            System.out.print("准考证号:");
            String ExamCard=scanner.nextLine();
            System.out.print("学生姓名:");
            String StudentName=scanner.nextLine();
            System.out.print("地址:");
            String Location=scanner.nextLine();
            System.out.print("成绩:");
            String Grade=scanner.nextLine();
            ExamStudent examStudent=new ExamStudent(Integer.parseInt(Type),IDCard,ExamCard,StudentName,Location,Integer.parseInt(Grade));
            int i = jdbcPractice2.addMessage(examStudent);
            if(i>0){
                System.out.println("添加成功!您已影响了"+i+"行");
            }
        }


    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

孔雀南飞梦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值