总的就是这样
代码如下
package com.pojo;
/*
1 questionId 试题编号 int 主键 自增列
2 question 题干 nvarchar 300 非空
3 optionA 选项A nvarchar 300 非空
4 optionB 选项B nvarchar 300 非空
5 optionC 选项C nvarchar 300 非空
6 optionD 选项D nvarchar 300 非空
7 subject 科目 int 非空 1代表Java、2代表C#、3代表JSP
8 answer 正确答案 nvarchar 10 非空
使用工厂方法
*/
public class QuestionInfo {
private int questionId;
private String question;
private String optionA;
private String optionB;
private String optionC;
private String optionD;
private int subject;
private String answer;
public QuestionInfo() {
}
public QuestionInfo(String question, String optionA, String optionB, String optionC, String optionD, int subject, String answer) {
this.question = question;
this.optionA = optionA;
this.optionB = optionB;
this.optionC = optionC;
this.optionD = optionD;
this.subject = subject;
this.answer = answer;
}
public int getQuestionId() {
return questionId;
}
public void setQuestionId(int questionId) {
this.questionId = questionId;
}
public String getQuestion() {
return question;
}
public void setQuestion(String question) {
this.question = question;
}
public String getOptionA() {
return optionA;
}
public void setOptionA(String optionA) {
this.optionA = optionA;
}
public String getOptionB() {
return optionB;
}
public void setOptionB(String optionB) {
this.optionB = optionB;
}
public String getOptionC() {
return optionC;
}
public void setOptionC(String optionC) {
this.optionC = optionC;
}
public String getOptionD() {
return optionD;
}
public void setOptionD(String optionD) {
this.optionD = optionD;
}
public int getSubject() {
return subject;
}
public void setSubject(int subject) {
this.subject = subject;
}
public String getAnswer() {
return answer;
}
public void setAnswer(String answer) {
this.answer = answer;
}
}
package com.Dao;
import com.pojo.QuestionInfo;
import java.util.List;
public interface QuestionInfoDao {
boolean insert(QuestionInfo q);
boolean deleteById(int id);
List<QuestionInfo> getQuestionBySub(int sub);
List<QuestionInfo> getAll();
List<QuestionInfo> getQuestoinByQ(String s);
}
package com.Dao.impl;
import com.Dao.QuestionInfoDao;
import com.Util.JDBCUtil;
import com.pojo.QuestionInfo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class QuestionInfoDaoImpl implements QuestionInfoDao {
private Connection conn= JDBCUtil.getCt();
private PreparedStatement pst = null;
@Override
public boolean insert(QuestionInfo q) {
String sql = "insert into tb_question(question,optionA,optionB,optionC,optionD,subject,answer) values(?,?,?,?,?,?,?)";
try {
pst=conn.prepareStatement(sql);
pst.setString(1,q.getQuestion());
pst.setString(2,q.getOptionA());
pst.setString(3,q.getOptionB());
pst.setString(4,q.getOptionC());
pst.setString(5,q.getOptionD());
pst.setInt(6,q.getSubject());
pst.setString(7,q.getAnswer());
int i = pst.executeUpdate();
if (i>0){
return true;
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return false;
}
@Override
public boolean deleteById(int id) {
String sql ="delete from tb_question where questionId = ?";
try {
pst=conn.prepareStatement(sql);
pst.setInt(1,id);
int i = pst.executeUpdate();
if (i>0){
return true;
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return false;
}
@Override
public List<QuestionInfo> getQuestionBySub(int sub) {
String sql = "select * from tb_question where subject=?";
try {
pst=conn.prepareStatement(sql);
pst.setInt(1,sub);
ResultSet rs = pst.executeQuery();
List<QuestionInfo> list = new ArrayList<>();
while (rs.next()){
QuestionInfo q = new QuestionInfo();
q.setQuestionId(rs.getInt("questionId"));
q.setQuestion(rs.getString("question"));
q.setOptionA(rs.getString("optionA"));
q.setOptionB(rs.getString("optionB"));
q.setOptionC(rs.getString("optionC"));
q.setOptionD(rs.getString("optionD"));
q.setSubject(rs.getInt("subject"));
q.setAnswer(rs.getString("answer"));
list.add(q);
}
return list;
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
@Override
public List<QuestionInfo> getAll() {
String sql = "select * from tb_question";
List<QuestionInfo> list = new ArrayList<>();
try {
pst=conn.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
while (rs.next()){
QuestionInfo q = new QuestionInfo();
q.setQuestionId(rs.getInt("questionId"));
q.setQuestion(rs.getString("question"));
q.setOptionA(rs.getString("optionA"));
q.setOptionB(rs.getString("optionB"));
q.setOptionC(rs.getString("optionC"));
q.setOptionD(rs.getString("optionD"));
q.setSubject(rs.getInt("subject"));
q.setAnswer(rs.getString("answer"));
list.add(q);
}
return list;
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
@Override
public List<QuestionInfo> getQuestoinByQ(String s) {
String sql = "select * from tb_question where question like '%"+s+"%'";
try {
pst=conn.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
List<QuestionInfo> list = new ArrayList<>();
while (rs.next()){
QuestionInfo q = new QuestionInfo();
q.setQuestionId(rs.getInt("questionId"));
q.setQuestion(rs.getString("question"));
q.setOptionA(rs.getString("optionA"));
q.setOptionB(rs.getString("optionB"));
q.setOptionC(rs.getString("optionC"));
q.setOptionD(rs.getString("optionD"));
q.setSubject(rs.getInt("subject"));
q.setAnswer(rs.getString("answer"));
list.add(q);
}
return list;
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
}
package com.Factorty;
import com.Dao.QuestionInfoDao;
import com.Dao.impl.QuestionInfoDaoImpl;
import com.Service.QuestionService;
import com.Service.impl.QuestionServiceImpl;
public class Factory {
public static QuestionService getQS(){
return new QuestionServiceImpl();
}
public static QuestionInfoDao getQD(){
return new QuestionInfoDaoImpl();
}
}
package com.Service;
import com.pojo.QuestionInfo;
import java.util.List;
public interface QuestionService {
void getAll();
void insert();
void getQuesByQues();
void getQuesBySub();
void deleteQById();
}
package com.Service.impl;
import com.Dao.QuestionInfoDao;
import com.Factorty.Factory;
import com.Service.QuestionService;
import com.pojo.QuestionInfo;
import java.util.List;
import java.util.Scanner;
public class QuestionServiceImpl implements QuestionService {
Scanner input = new Scanner(System.in);
QuestionInfoDao dao= Factory.getQD();
//列出所有试题
@Override
public void getAll() {
List<QuestionInfo> all = dao.getAll();
for (QuestionInfo q : all) {
showQues(q);
}
}
//显示试题的格式
public void showQues(QuestionInfo q){
System.out.println(q.getQuestionId()+"、"+q.getQuestion());
System.out.println("\t选项A:"+q.getOptionA());
System.out.println("\t选项B:"+q.getOptionB());
System.out.println("\t选项C:"+q.getOptionC());
System.out.println("\t选项D:"+q.getOptionD());
System.out.println("\t答案:"+q.getAnswer());
}
//插入试题
@Override
public void insert() {
System.out.print("请选择科目:(1.Java 2.C# 3.JSP)");
int sub = input.nextInt();
System.out.print("请输入新的题干:");
String question = input.next();
System.out.print("请输入新的选项A:");
String a = input.next();
System.out.print("请输入新的选项B:");
String b = input.next();
System.out.print("请输入新的选项C:");
String c = input.next();
System.out.print("请输入新的选项D:");
String d = input.next();
System.out.print("请输入新的答案:");
String answer = input.next();
if (dao.insert(new QuestionInfo(question,a,b,c,d,sub,answer))){
System.out.println("添加成功!");
}else {
System.out.println("添加失败!");
}
}
//通过题干查询
@Override
public void getQuesByQues() {
System.out.print("请输入题干:");
String ques = input.next();
List<QuestionInfo> questoinByQ = dao.getQuestoinByQ(ques);
if (questoinByQ == null||questoinByQ.isEmpty()){
System.out.println("暂无数据!");
return;
}
for (QuestionInfo q : questoinByQ) {
showQues(q);
}
}
//通过科目显示试题
@Override
public void getQuesBySub() {
System.out.print("请选择科目:(1.Java 2.C# 3.JSP)");
int sub = input.nextInt();
List<QuestionInfo> questionBySub = dao.getQuestionBySub(sub);
if (questionBySub == null||questionBySub.isEmpty()){
System.out.println("暂无数据!");
return;
}
for (QuestionInfo questionInfo : questionBySub) {
showQues(questionInfo);
}
}
//通过试题编号删除试题
@Override
public void deleteQById() {
System.out.print("请输入要删除的试题编号:");
int id = input.nextInt();
while (!dao.deleteById(id)){
System.out.println("对不起,没有要删除的编号,请重新输入!");
System.out.print("请输入要删除的试题编号:");
id = input.nextInt();
}
System.out.println("删除成功!");
}
}
package com.Util;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
public class JDBCUtil {
private static final String DRIVER="com.mysql.cj.jdbc.Driver";
private static final String URL="jdbc:mysql://localhost:3306/sys?serverTimezone=GMT%2B8";
private static final String USER="root";
private static final String PASSWORD="654321";
private static Connection ct =null;
private static PreparedStatement ps;
private static ResultSet rs;
public static Connection getCt(){
try {
Class.forName(DRIVER);
ct= DriverManager.getConnection(URL,USER,PASSWORD);
return ct;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
}
package com;
import com.Factorty.Factory;
import java.util.Scanner;
public class Main {
Scanner input = new Scanner(System.in);
static {
System.out.println("****************欢迎使用试题管理系统***************\n");
}
public void ShowMenu(){
System.out.print("请选择操作(1.列出所有试题 2.按科目查询 3.按题干模糊查询 4.添加试题 5.删除试题 6.退出系统)");
int choose = input.nextInt();
switch (choose){
case 1:
Factory.getQS().getAll();
ShowMenu();
break;
case 2:
Factory.getQS().getQuesBySub();
ShowMenu();
break;
case 3:
Factory.getQS().getQuesByQues();
ShowMenu();
break;
case 4:
Factory.getQS().insert();
ShowMenu();
break;
case 5:
Factory.getQS().deleteQById();
ShowMenu();
break;
case 6:
Exit();
default:
System.out.println("没有这个操作!");
ShowMenu();
}
}
public void Exit(){
System.out.println("感谢使用!");
System.exit(0);
}
public static void main(String[] args) {
new Main().ShowMenu();
}
}
数据库语句那里可以写简便点的,但是我JDBCUtil嫌麻烦没写就只能这样了,如果JDBCUtil写了会少些很多,比如像这样
一个方法写三行
JDBCUti代码
package Util;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
public class JDBCUtil {
static Properties properties = new Properties();
//加载驱动
static {
InputStream resourceAsStream = JDBCUtil.class.getClassLoader().getResourceAsStream("db.properties");
try {
properties.load(resourceAsStream);
Class.forName(properties.getProperty("driverClass"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//获取连接对象
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(properties.getProperty("url"),properties.getProperty("username"),properties.getProperty("password"));
}
public static void close(ResultSet rs, Connection con, PreparedStatement ps){
try {
if (rs!=null){
rs.close();
}
if (con!=null){
con.close();
}
if (ps!=null){
ps.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
//增删改的方法
public static int executeUpdate(String sql,Object... par){
Connection con=null;
PreparedStatement ps=null;
try {
con=JDBCUtil.getConnection();
ps=con.prepareStatement(sql);
if (par !=null && par.length>0){
for (int i = 0; i < par.length; i++) {
ps.setObject(i+1,par[i]);
}
}
return ps.executeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
JDBCUtil.close(null,con,ps);
}
return 0;
}
//解析Resultset的数据
public static <T> List<T> parseResult(ResultSet rs,Class<T> tClass) throws SQLException, IllegalAccessException, InstantiationException {
List<T> list = new ArrayList<>();
if (rs == null){
return null;
}
//获取到了T类型的数据
while (rs.next()){
//存储获取到的一行数据的对象
T t = tClass.newInstance();
//获取到这个类的所有属性
Field[] fields = tClass.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
//通过rs.getObject里填field.getName获取列名(前提是属性名和数据库的列名一致)
field.set(t,rs.getObject(field.getName()));
}
list.add(t);
}
return list;
}
/*
查询
通过主键查询,传入的参数有多个,不确定,数组类型。然后返回的是一个数组对象
*/
public static <T> List<T> executeQuery(String sql , Class<T> tClass,Object... params){
Connection con=null;
PreparedStatement ps=null;
ResultSet rs = null;
try {
con=JDBCUtil.getConnection();
ps=con.prepareStatement(sql);
if (params !=null && params.length>0){
for (int i = 0; i < params.length; i++) {
ps.setObject(i+1,params[i]);
}
}
rs=ps.executeQuery();
return JDBCUtil.parseResult(rs,tClass);
} catch (SQLException throwables) {
throwables.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(rs,con,ps);
}
return null;
}
}