JDBC-试题信息管理(增删改查)

一、项目介绍

本次项目基于IDEA,使用JDBC技术配套MySQL实现对数据库的增删改查的操作。
用户可以通过该系统查询所有的试题信息,可以根据关键字查询包含该关键字的试题合集,
可以对试题进行添加、可以删除相关的试题,可以按照科目查询试题

二、项目搭建

第一步:创建包

创建项目,并创建项目的包-为域名的反写  如www.baidu.com的包名为com.baidu.www

第二步:引入mysql驱动以及数据库专门的配置文件db.properties

在第一步创建的包下面创建一个包名为bin的包,专门存放驱动文件
数据库配置文件放在src目录下,该文件主要存放数据库的名称和密码等

第三步:引入之前写过的JDBC工具类 JDBCUtil

创建一个包名为util的包专门存放工具类,这里就不做展示,可以参考上一篇文章或者点击下方链接(第二步第3点)

JDBCUtil工具类

第四步:创建启动类

创建一个包名为app的包,存放可以运行的文件即启动类

第五步:编写启动类中的代码

创建main函数,需要注意的一点是:代码尽量都用方法进行封装,不能全部都写在main方法中,并且创建的名称都需要见名知意

第六步:创建对应数据库表的类

如果使用到了数据库中的user表,该表中有字段name,age等,则需要再创建一个pojo类,专门存放实体类,属性全部为private类型,提供get和set方法以及toString方法

第七步:使用mysql对数据进行增删改查

使用到mysql就需要使用到dao包下面的接口,然后通过对应的实现类实现该接口后调用相应的方法对数据进行操作
xxxxDao 接口放在专门的dao包下面
xxxxDaoImpl 类放在dao包下的Impl包中

具体语法:
	QuestionInfoDao questionInfoDao = new QuestionInfoDaoImpl();
	questionInfoDao.deleteById(testIndex)

三、目录结构

在这里插入图片描述


四、启动类代码

package com.fs.Infomation.app;

import com.fs.Infomation.dao.QuestionInfoDao;
import com.fs.Infomation.dao.impl.QuestionInfoDaoImpl;
import com.fs.Infomation.pojo.QuestionInfo;

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

public class InfomationApp {
    
    
    // 试题信息管理系统
    Scanner input = new Scanner(System.in);
    QuestionInfoDao questionInfoDao = new QuestionInfoDaoImpl();
    String character[] = {
    
    "A","B","C","D"};
    public static void main(String[] args) {
    
    
        new InfomationApp().Menu();
    }

    /*
    * 首页
    * */
    private  void Menu() {
    
    
        System.out.println("*************************欢迎使用试题管理系统*************************");
        System.out.print("请选择操作(1.列出所有试题 2.按科目查询 3.按题干模糊查询 4.添加试题 5.删除试题 6.退出系统):");
        int index = input.nextInt();
        switch (index){
    
    
            case 1:
                // 列出所有试题
                allInfomation();
                break;
            case 2:
                // 按科目查询
                selectBySubject();
                break;
            case 3:
                // 按题干模糊查询
                selectByDim();
                break;
            case 4:
                // 添加试题
                addTest();
                break;
            case 5:
                // 删除试题
                deleteTest();
                break;
            case 6:
                // 退出系统
                exitSystem();
                break;
            default:
                System.out.println("输入有误!");
                Menu();
                break;
        }
    }

    // todo 退出系统
    private void exitSystem() {
    
    
        System.out.println("欢迎下次使用~");
        try {
    
    
            Thread.sleep(2000);
        } catch (InterruptedException e) {
    
    
            e.printStackTrace();
        }
        System.exit(0);
    }

    // todo 删除试题
    private void deleteTest() {
    
    
        System.out.print("请输入需要删除的试题编号:");
        int testIndex = input.nextInt();
        QuestionInfo questionInfo = questionInfoDao.queryById(testIndex);
        if (questionInfo==null){
    
    
            System.out.println("对不起,没有要删除的编号,请重新输入");
        }else {
    
    
            int rows = questionInfoDao.deleteById(testIndex);
            if (rows>0){
    
    
                System.out.println("删除成功!");
            }else {
    
    
                System.out.println("删除失败!");
            }
        }
        Menu();

    }

    // todo 添加试题
    private void addTest() {
    
    
        System.out.print("请输入科目(1.Java 2.C# 3.JSP):");
        int subject = input.nextInt();
        System.out.print("请输入新的题干:");
        String question = input.next();
        System.out.print("请输入新的选项A:");
        String optionA = input.next();
        System.out.print("请输入新的选项B:");
        String optionB = input.next();
        System.out.print("请输入新的选项C:");
        String optionC = input.next();
        System.out.print("请输入新的选项D:");
        String optionD = input.next();
        System.out.print("请输入新的答案:");
        String answer = input.next();

        QuestionInfo questionInfo = new QuestionInfo();
        questionInfo.setAnswer(answer);
        questionInfo.setOptionA(optionA);
        questionInfo.setOptionB(optionB);
        questionInfo.setOptionC(optionC);
        questionInfo.setOptionD(optionD);
        questionInfo.setSubject(subject);
        questionInfo.setQuestion(question);
        int rows = questionInfoDao.insert(questionInfo);
        if (rows>0){
    
    
            System.out.println("添加成功!");
        }else {
    
    
            System.out.println("添加失败!");
        }
        Menu();
    }

    // todo 按题干模糊查询
    private void selectByDim() {
    
    
        System.out.print("请输入题干:");
        String dim = input.next();
        List<QuestionInfo> questionInfos = questionInfoDao.queryByTDim(dim);
        if (questionInfos==null){
    
    
            System.out.println("[友情提示]:没有包含该题干的题目!");
        }else {
    
    
            for (int i = 0; i < questionInfos.size(); i++) {
    
    
                System.out.println(questionInfos.get(i).getQuestionId()+"、"+questionInfos.get(i).getQuestion());
                System.out.println("\t选项"+character[0]+":"+questionInfos.get(i).getOptionA());
                System.out.println("\t选项"+character[1]+":"+questionInfos.get(i).getOptionB());
                System.out.println("\t选项"+character[2]+":"+questionInfos.get(i).getOptionC());
                System.out.println("\t选项"+character[3]+":"+questionInfos.get(i).getOptionD());
                System.out.println("\t答案:"+questionInfos.get(i).getAnswer());
            }
        }
        Menu();


    }

    // todo 按科目查询
    private void selectBySubject() {
    
    
        System.out.print("请输入科目(1.Java 2.C# 3.JSP):");
        int subjectIndex = input.nextInt();
        List<QuestionInfo> questionInfos = questionInfoDao.queryBySubject(subjectIndex);
        if (questionInfos==null){
    
    
            System.out.println("[友情提示]:没有该科目的题目!");
        }else {
    
    
            for (int i = 0; i < questionInfos.size(); i++) {
    
    
                System.out.println(questionInfos.get(i).getQuestionId()+"、"+questionInfos.get(i).getQuestion());
                System.out.println("\t选项"+character[0]+":"+questionInfos.get(i).getOptionA());
                System.out.println("\t选项"+character[1]+":"+questionInfos.get(i).getOptionB());
                System.out.println("\t选项"+character[2]+":"+questionInfos.get(i).getOptionC());
                System.out.println("\t选项"+character[3]+":"+questionInfos.get(i).getOptionD());
                System.out.println("\t答案:"+questionInfos.get(i).getAnswer());
            }
        }
        Menu();
    }

    // todo 列出所有试题
    private void allInfomation() {
    
    
        List<QuestionInfo> questionInfos = questionInfoDao.queryAll();
        if (questionInfos==null){
    
    
            System.out.println("[友情提示]:没有题目!");
        }else {
    
    
            for (int i = 0; i < questionInfos.size(); i++) {
    
    
                System.out.println(questionInfos.get(i).getQuestionId()+"、"+questionInfos.get(i).getQuestion());
                System.out.println("\t选项"+character[0]+":"+questionInfos.get(i).getOptionA());
                System.out.println("\t选项"+character[1]+":"+questionInfos.get(i).getOptionB());
                System.out.println("\t选项"+character[2]+":"+questionInfos.get(i).getOptionC());
                System.out.println("\t选项"+character[3]+":"+questionInfos.get(i).getOptionD());
                System.out.println("\t答案:"+questionInfos.get(i).getAnswer());
            }
        }
        Menu();
    }
}


五、Dao接口代码

package com.fs.Infomation.dao;

import com.fs.Infomation.pojo.QuestionInfo;

import java.util.List;

public interface QuestionInfoDao {
    
    

    List<QuestionInfo> queryAll();

    List<QuestionInfo> queryBySubject(int subjectIndex);

    List<QuestionInfo> queryByTDim(String dim);

    int insert(QuestionInfo questionInfo);

    int deleteById(int testIndex);

    QuestionInfo queryById(int testIndex);
}


六、Impl实现类方法

package com.fs.Infomation.dao.impl;

import com.fs.Infomation.dao.QuestionInfoDao;
import com.fs.Infomation.pojo.QuestionInfo;
import com.fs.Infomation.util.JDBCUtil;

import javax.sql.rowset.JdbcRowSet;
import java.util.List;

public class QuestionInfoDaoImpl implements QuestionInfoDao {
    
    
    /*
    * 查询所有
    * */
    @Override
    public List<QuestionInfo> queryAll() {
    
    
        String sql = "select * from tb_question_info ";
        return JDBCUtil.executeQuery(sql,QuestionInfo.class);
    }
    /*
     * 根据科目查询
     * */
    @Override
    public List<QuestionInfo> queryBySubject(int subjectIndex) {
    
    
        String sql = "select * from tb_question_info where subject=?";
        return JDBCUtil.executeQuery(sql,QuestionInfo.class,subjectIndex);
    }

    /*
    * 根据题干模糊查询
    * */
    @Override
    public List<QuestionInfo> queryByTDim(String dim) {
    
    
        dim = "%"+dim+"%";
        String sql = "select * from tb_question_info where question like ?";
        return JDBCUtil.executeQuery(sql,QuestionInfo.class,dim);
    }

    /*
    * 添加题目
    * */
    @Override
    public int insert(QuestionInfo questionInfo) {
    
    
        String sql = "insert into tb_question_info(question,optionA,optionB,optionC,optionD,subject,answer) values(?,?,?,?,?,?,?)";
        return JDBCUtil.executeUpdate(sql,questionInfo.getSubject(),questionInfo.getQuestion(),questionInfo.getOptionA(),questionInfo.getOptionB()
        ,questionInfo.getOptionC(),questionInfo.getOptionD(),questionInfo.getAnswer());
    }

    /*
    * 根据id删除
    * */
    @Override
    public int deleteById(int testIndex) {
    
    
        String sql = "delete from tb_question_info where questionId=?";
        return JDBCUtil.executeUpdate(sql,testIndex);
    }

    /*
    * 根据课程编号查询
    * */
    @Override
    public QuestionInfo queryById(int testIndex) {
    
    
        String sql = "select * from tb_question_info where questionId=?";
        List<QuestionInfo> questionInfos = JDBCUtil.executeQuery(sql, QuestionInfo.class, testIndex);
        return questionInfos==null||questionInfos.isEmpty()?null:questionInfos.get(0);
    }


}


七、数据库表

questionId 为主键 非空 自增长
question 为字符类型 非空
subject 为int类型  非空
answer 为字符类型 长度为1  非空
option A-D 都为字符类型 非空

在这里插入图片描述


八、结果展示

1、主页面
在这里插入图片描述

2、列出所有试题
在这里插入图片描述

3、按科目查询
在这里插入图片描述

4、按照关键字查询
在这里插入图片描述

5、添加试题
在这里插入图片描述

6、删除试题
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_52998673/article/details/126946631