cregithar
2020-11-06 17:16
采纳率: 95.2%
浏览 7
已采纳

关于mysql的查找问题

我在用Java swing写一个简单的练习系统,创建了一个试卷的实体,里面包含了20道题

数据库大概情况

public class practiceQuestion {
	public int practiceId;  //试卷id
	public int sum;        //该试卷有多少道题目
	public int question1; //存的是题目id
	public int question2;
	public int question3;
	public int question4;
	public int question5;
	public int question6;
	public int question7;
	public int question8;
	public int question9;
	public int question10;
	public int question11;
	public int question12;
	public int question13;
	public int question14;
	public int question15;
	public int question16;
	public int question17;
	public int question18;
	public int question19;
	public int question20;
	

}

但是这20道题不是所有的都会用得上,20道题只是限制最多只能加入20道题到这个试卷上,你也可以只加5道题到试卷上,这个时候其他15道题目就用不上了

然后就是进行mysql数据库层面的查找

//查询所有
	public List<practiceQuestion> getAll(){
		List<practiceQuestion> pqs = new ArrayList<>();
		
		String sql = "select * from practice_Question";
		
		try(Connection c = DBUtil.getConnection();){
			
			Statement s = c.createStatement();
			ResultSet rs = s.executeQuery(sql);
			
			while(rs.next()){
				practiceQuestion pq = new practiceQuestion();
				
				pq.practiceId = rs.getInt("practice_id");
				//这个是用到的题目总数,比如说你在创建试卷的时候只放进去5道题,那 sum = 5;
				pq.sum = rs.getInt("sum");
				
				//很多,即使有一些题目是没用到的,在查询的时候也要全部写出来
				pq.question1 = rs.getInt("question_1");
				pq.question2 = rs.getInt("question_2");
				pq.question3 = rs.getInt("question_3");
				pq.question4 = rs.getInt("question_4");
				pq.question5 = rs.getInt("question_5");
				pq.question6 = rs.getInt("question_6");
				pq.question7 = rs.getInt("question_7");
				pq.question8 = rs.getInt("question_8");
				pq.question9 = rs.getInt("question_9");
				pq.question10 = rs.getInt("question_10");
				pq.question11 = rs.getInt("question_11");
				pq.question12 = rs.getInt("question_12");
				pq.question13 = rs.getInt("question_13");
				pq.question14 = rs.getInt("question_14");
				pq.question15 = rs.getInt("question_15");
				pq.question16 = rs.getInt("question_16");
				pq.question17 = rs.getInt("question_17");
				pq.question18 = rs.getInt("question_18");
				pq.question19 = rs.getInt("question_19");
				pq.question20 = rs.getInt("question_20");
				
				pqs.add(pq);
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		
		return pqs;
}

 

我想问的是:在知道试卷中题目的数量(sum)后,能不能在查找时可以少写点代码。比如,现在我知道该试卷中有只有5道题(sum=5),那在查询时,有什么办法可以做到我只需要查询到5就行,后面的不用找了

//sum = 5时,只需要查询到5就行,后面的可以不用管了
				pq.question1 = rs.getInt("question_1");
				pq.question2 = rs.getInt("question_2");
				pq.question3 = rs.getInt("question_3");
				pq.question4 = rs.getInt("question_4");
				pq.question5 = rs.getInt("question_5");

还是说必需要把全部属性都写出来?

 

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 一丝混乱 2020-11-06 17:52
    已采纳

    手一快打错了……现在怎么不让编辑了。

    for (int i = 1; i <= pq.sum; i++) {
        Field field = practiceQuestion.class.getField("question_" + i);
        field.set(pq, rs.getInt("question_" + i));
    }
    pqs.add(pq);

     

    打赏 评论
  • 一丝混乱 2020-11-06 17:45
    				//很多,即使有一些题目是没用到的,在查询的时候也要全部写出来
    				pq.question1 = rs.getInt("question_1");
    				pq.question2 = rs.getInt("question_2");
    				pq.question3 = rs.getInt("question_3");
    				pq.question4 = rs.getInt("question_4");
    				pq.question5 = rs.getInt("question_5");
    				pq.question6 = rs.getInt("question_6");
    				pq.question7 = rs.getInt("question_7");
    				pq.question8 = rs.getInt("question_8");
    				pq.question9 = rs.getInt("question_9");
    				pq.question10 = rs.getInt("question_10");
    				pq.question11 = rs.getInt("question_11");
    				pq.question12 = rs.getInt("question_12");
    				pq.question13 = rs.getInt("question_13");
    				pq.question14 = rs.getInt("question_14");
    				pq.question15 = rs.getInt("question_15");
    				pq.question16 = rs.getInt("question_16");
    				pq.question17 = rs.getInt("question_17");
    				pq.question18 = rs.getInt("question_18");
    				pq.question19 = rs.getInt("question_19");
    				pq.question20 = rs.getInt("question_20");
    				
    				pqs.add(pq);

    把这段改成

    for (int i = 1; i <= pq.sum; i++) {
        pq.question1 = rs.getInt("question_" + i);
    	pqs.add(pq);
    }

     

     

     

    不过我建议你可以更进一步,改变你表格的设计。

    既然卷子和题目是一对多的关系,那么在卷子这里建20个字段显然不太合适。

    正确的做法是在题目表增加一个卷子字段(还可以增加一个顺序字段)。或者建一张卷子和题目的中间表

     

    打赏 评论
  • 天涯若风 2020-11-06 18:25

    代码不是这样设计的,今天一份试卷里面只有5道题,明天要改成10道呢,是不是要改代码。

    直接定义一个list<题目的id>就可以了呀,有多少道题,直接通过size定义就可以了

    打赏 评论

相关推荐 更多相似问题