java一对多查询显示

u011104235 2015-01-06 12:58:04
类似网上调查,一个题目的survey(surId,surName)表,一个选项的option(optId,optName,surId)表,option表有survey的surId外键,我想在页面查询出各个题目,题目下有对应的选项,我用的是java语言,MySQL,求实现思路,数据库能查询出来,但是我在页面迭代不出效果
我想在页面显示出:
1/你最爱的运动是什么
A:足球
B:羽毛球
C:篮球
D:网球
2/你最爱的地方
A:操场
B:图书馆
C:教学楼
D:办公楼
...全文
573 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
u011104235 2015-01-08
  • 打赏
  • 举报
回复
引用 23 楼 zxs6587 的回复:
这样才能分组,但是这样的话每条题目的name是不一样了 每个题目的name要一样吗???一样的话所有题目按钮只能选一个啊? 后台要获取全部的选项吗??
对啊,然后我前台 <table cellpadding="0" cellspacing="0"> <c:forEach var="survey" items="${lists }" varStatus="status"> <tr> <td><input type="hidden" name="surId" value="${survey.surId }"/>${survey.surTitle }</td> </tr> <tr> <td> <table> <c:forEach var="option" items="${survey.suroptlist}"> <tr> <td> <input type="radio" name="optId${status.index + 1}" id="${option.optId }" value="${option.optId }" /> <label for="${option.optId }">${option.optName }</label> </td> </tr> </c:forEach> </table> </td> </tr> </c:forEach> <tr> <td colspan="2"><input type="submit" value="确定"/></td> </tr> </table> int optId=0; int surId=0; SurveyService surveyService=new SurveyService(); int count=surveyService.countAllSurvey();//总数 System.out.println(count); for(int i=1;i<=count;i++){ surId=Integer.parseInt(request.getParameter("surId")); System.out.println("surId="+surId); optId=Integer.parseInt(request.getParameter("optId"+i)); System.out.println("optId="+optId); } //String[] surIdArr=request.getParameterValues("surId"); //record.setRecUserip(recUserip); int[] surIdArr=new int[surId]; int[] optIdArr=new int[optId]; record=new Record(); record.setSurIdArr(surIdArr); record.setOptIdArr(optIdArr); 后台遍历来获取提交的数据并放入数组,但是报错了 rejected value [1,2,3]; codes [typeMismatch.record.surId,typeMismatch.surId,typeMismatch.java.lang.Integer,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [record.surId,surId]; arguments []; default message [surId]]; default message [Failed to convert property value of type 'java.lang.String[]' to required type 'java.lang.Integer' for property 'surId'; nested exception is java.lang.NumberFormatException: For input string: "1,2,3"]
Runner6587 2015-01-08
  • 打赏
  • 举报
回复
这样才能分组,但是这样的话每条题目的name是不一样了 每个题目的name要一样吗???一样的话所有题目按钮只能选一个啊? 后台要获取全部的选项吗??
u011104235 2015-01-08
  • 打赏
  • 举报
回复
引用 21 楼 zxs6587 的回复:
radio要name不同才能分组????是name相同还是不同?? 足球 羽毛球 篮球 网球 橄榄球 乒乓球 这是一组吧?是不是只能选一个? 这些redio的name属性要相同,后台通过name属性获取的是value属性值。 <input type="radio" name="sport" value="basketball" />篮球 <input type="radio" name="sport" value="football" checked/>足球 。。。。。 如果选择的是足球,后台request.getParameter("sport");获取的值是football。 不怎么明白你说的逻辑什么意思?
不同题目之间的name要不一样才能分组,比如: 第一条题目: <input type="radio" name="sport" value="basketball" />篮球 <input type="radio" name="sport" value="football" checked/>足球 第二条题目: <input type="radio" name="sport2" value="basketball" />篮球 <input type="radio" name="sport2" value="football" checked/>足球 这样才能分组,但是这样的话每条题目的name是不一样了,但是我后台是用int optId=Integer.parseInt(request.getParameter("optId"));来获取,radio的全部name=optid才能够获取得到,这样的话又不能够分组了,有什么办法可以解决吗?我听人说可以通过type类型来获取,但我完全不懂什么意思
Runner6587 2015-01-08
  • 打赏
  • 举报
回复
radio要name不同才能分组????是name相同还是不同?? 足球 羽毛球 篮球 网球 橄榄球 乒乓球 这是一组吧?是不是只能选一个? 这些redio的name属性要相同,后台通过name属性获取的是value属性值。 <input type="radio" name="sport" value="basketball" />篮球 <input type="radio" name="sport" value="football" checked/>足球 。。。。。 如果选择的是足球,后台request.getParameter("sport");获取的值是football。 不怎么明白你说的逻辑什么意思?
u011104235 2015-01-08
  • 打赏
  • 举报
回复
引用 19 楼 zxs6587 的回复:
[quote=引用 18 楼 u011104235 的回复:] [quote=引用 16 楼 zxs6587 的回复:] <c:forEach var="survey" items="${lists }" varStatus="status"> 存的这个lists有问题啊! Select * From survey; lists怎么那么多重复数据?
我知道什么回事了,我忘了把sql语句改了,谢谢你![/quote][/quote] 又遇到了一个问题了,radio要name不同才能分组,但是我后台是通过name来获取提交上来的数据的啊 int optId=Integer.parseInt(request.getParameter("optId"));如果radio不同我获取不了啊,求帮帮忙! <form action="../record/insertRecord.action" method="post"> <table cellpadding="0" cellspacing="0"> <c:forEach var="survey" items="${lists }" varStatus="status"> <tr> <td><input type="hidden" name="surId" value="${survey.surId }"/>${survey.surTitle }</td> </tr> <tr> <td> <table> <c:forEach var="option" items="${survey.suroptlist}"> <tr> <td> <input type="radio" name="${status.index + 1}" id="${option.optId }" value="${option.optId }" /> <label for="${option.optId }">${option.optName }</label> </td> </tr> </c:forEach> </table> </td> </tr> </c:forEach> <tr> <td colspan="2"><input type="submit" value="确定"/></td> </tr> </table> </form>
Runner6587 2015-01-07
  • 打赏
  • 举报
回复
引用 11 楼 u011104235 的回复:
suroptlist 就是Select * Form option where surId=?查出来的list集合 <td><input type="radio" name="optId" value="${survey.suroptlist.optId }" />${survey.suroptlist.optName }</td> 我这样遍历是报错的java.lang.NumberFormatException: For input string: "optId"和java.lang.NumberFormatException: For input string: "optName" 页面遍历得怎么写呢
${survey.suroptlist}这样取出的是装有option对象的集合!这个集合中是没有optId和optName属性的!只有option对象! 可以使用forEach标签! <c:forEach var="option" items="${survey.suroptlist}" "> <td><input type="radio" name="optId" value="${option.optId }" />${option.optName }</td> </c:forEach>
wyx100 2015-01-07
  • 打赏
  • 举报
回复
引用 1 楼 aazbc 的回复:
sql语句有了,接下来就是通过jdbc操作mysql读取数据(需要jar包),然后展现出来
Runner6587 2015-01-07
  • 打赏
  • 举报
回复
引用 18 楼 u011104235 的回复:
[quote=引用 16 楼 zxs6587 的回复:] <c:forEach var="survey" items="${lists }" varStatus="status"> 存的这个lists有问题啊! Select * From survey; lists怎么那么多重复数据?
我知道什么回事了,我忘了把sql语句改了,谢谢你![/quote]
u011104235 2015-01-07
  • 打赏
  • 举报
回复
引用 16 楼 zxs6587 的回复:
<c:forEach var="survey" items="${lists }" varStatus="status"> 存的这个lists有问题啊! Select * From survey; lists怎么那么多重复数据?
我知道什么回事了,我忘了把sql语句改了,谢谢你!
u011104235 2015-01-07
  • 打赏
  • 举报
回复
引用 16 楼 zxs6587 的回复:
<c:forEach var="survey" items="${lists }" varStatus="status"> 存的这个lists有问题啊! Select * From survey; lists怎么那么多重复数据?
难道是这里错了吗? public List<Survey> querySurveyOption(){ List surveylist=new ArrayList(); conn=db.getConn(); String sql="SELECT * FROM options INNER JOIN survey on survey.surId = options.surId where surActive=1"; System.out.println(sql); try { ps=conn.prepareStatement(sql); ResultSet rs=ps.executeQuery(); while(rs.next()){ Survey survey=new Survey(); survey.setSurId(rs.getInt("surId")); survey.setSurTitle(rs.getString("surTitle")); survey.setSurActive(rs.getInt("surActive")); List<Options> suroptlist=new OptionsService().queryNamebySurId(rs.getInt("surId")); survey.setSuroptlist(suroptlist); surveylist.add(survey); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return surveylist; }
Runner6587 2015-01-07
  • 打赏
  • 举报
回复
<c:forEach var="survey" items="${lists }" varStatus="status"> 存的这个lists有问题啊! Select * From survey; lists怎么那么多重复数据?
u011104235 2015-01-07
  • 打赏
  • 举报
回复
引用 14 楼 zxs6587 的回复:
[quote=引用 11 楼 u011104235 的回复:] suroptlist 就是Select * Form option where surId=?查出来的list集合 <td><input type="radio" name="optId" value="${survey.suroptlist.optId }" />${survey.suroptlist.optName }</td> 我这样遍历是报错的java.lang.NumberFormatException: For input string: "optId"和java.lang.NumberFormatException: For input string: "optName" 页面遍历得怎么写呢
${survey.suroptlist}这样取出的是装有option对象的集合!这个集合中是没有optId和optName属性的!只有option对象! 可以使用forEach标签! <c:forEach var="option" items="${survey.suroptlist}" "> <td><input type="radio" name="optId" value="${option.optId }" />${option.optName }</td> </c:forEach> [/quote] 抱歉,回复的比较晚,我想再请教一个问题,怎么控制题目选项只显示一次 <table cellpadding="0" cellspacing="0"> <c:forEach var="survey" items="${lists }" varStatus="status"> <tr> <td><input type="hidden" name="surId" value="${survey.surId }"/>${survey.surTitle }</td> </tr> <tr> <c:forEach var="option" items="${survey.suroptlist}"> <td><input type="radio" name="optId" value="${option.optId }" />${option.optName }</td> </c:forEach> </tr> </c:forEach> <tr> <td colspan="2"><input type="submit" value="确定"/></td> </tr> </table> 你最爱的运动是什么 足球 羽毛球 篮球 网球 橄榄球 乒乓球 你最爱的运动是什么 足球 羽毛球 篮球 网球 橄榄球 乒乓球 你最爱的运动是什么 足球 羽毛球 篮球 网球 橄榄球 乒乓球 你最爱的运动是什么 足球 羽毛球 篮球 网球 橄榄球 乒乓球 你最爱的运动是什么 足球 羽毛球 篮球 网球 橄榄球 乒乓球 你最爱的运动是什么 足球 羽毛球 篮球 网球 橄榄球 乒乓球 最美之地 操场 图书馆 教学楼 办公楼 最美之地 操场 图书馆 教学楼 办公楼 最美之地 操场 图书馆 教学楼 办公楼 最美之地 操场 图书馆 教学楼 办公楼
xiu_326 2015-01-06
  • 打赏
  • 举报
回复
引用 11 楼 u011104235 的回复:
[quote=引用 8 楼 zxs6587 的回复:] [quote=引用 6 楼 u011104235 的回复:] [quote=引用 4 楼 zxs6587 的回复:] 一个Survey类,一个Option类 Survey类中包含一个Option类数组 查询一个Survey类中Option Select * Form option where surId=? 楼主的sql难道是Select survey.*,option.* From survey,option where survey.id=survey.surId????/
的确是用SELECT * FROM options INNER JOIN survey on survey.surId = options.surId查询,只会一些简单的sql查询语句...有什么办法可以实现吗?能详细说说吗[/quote] 就是建立两个实体对象 Survey和Option Survey包含id,name和一个包含Option的集合! Option包含id,name和一个对应的Survey类型! Survey中的Option就用Select * Form option where surId=?查出来放到集合中!页面遍历就行了![/quote] suroptlist 就是Select * Form option where surId=?查出来的list集合 <td><input type="radio" name="optId" value="${survey.suroptlist.optId }" />${survey.suroptlist.optName }</td> 我这样遍历是报错的java.lang.NumberFormatException: For input string: "optId"和java.lang.NumberFormatException: For input string: "optName" 页面遍历得怎么写呢[/quote]
引用 11 楼 u011104235 的回复:
[quote=引用 8 楼 zxs6587 的回复:] [quote=引用 6 楼 u011104235 的回复:] [quote=引用 4 楼 zxs6587 的回复:] 一个Survey类,一个Option类 Survey类中包含一个Option类数组 查询一个Survey类中Option Select * Form option where surId=? 楼主的sql难道是Select survey.*,option.* From survey,option where survey.id=survey.surId????/
的确是用SELECT * FROM options INNER JOIN survey on survey.surId = options.surId查询,只会一些简单的sql查询语句...有什么办法可以实现吗?能详细说说吗[/quote] 就是建立两个实体对象 Survey和Option Survey包含id,name和一个包含Option的集合! Option包含id,name和一个对应的Survey类型! Survey中的Option就用Select * Form option where surId=?查出来放到集合中!页面遍历就行了![/quote] suroptlist 就是Select * Form option where surId=?查出来的list集合 <td><input type="radio" name="optId" value="${survey.suroptlist.optId }" />${survey.suroptlist.optName }</td> 我这样遍历是报错的java.lang.NumberFormatException: For input string: "optId"和java.lang.NumberFormatException: For input string: "optName" 页面遍历得怎么写呢[/quote] 这里(${survey.suroptlist.optName }),你直接拿集合的optName, 是不行的。 suroptlist 是一个集合,可以用struts 标签的iterator迭代suroptlist 中的每个option, 然后取option的name属性值。
u011104235 2015-01-06
  • 打赏
  • 举报
回复
引用 8 楼 zxs6587 的回复:
[quote=引用 6 楼 u011104235 的回复:] [quote=引用 4 楼 zxs6587 的回复:] 一个Survey类,一个Option类 Survey类中包含一个Option类数组 查询一个Survey类中Option Select * Form option where surId=? 楼主的sql难道是Select survey.*,option.* From survey,option where survey.id=survey.surId????/
的确是用SELECT * FROM options INNER JOIN survey on survey.surId = options.surId查询,只会一些简单的sql查询语句...有什么办法可以实现吗?能详细说说吗[/quote] 就是建立两个实体对象 Survey和Option Survey包含id,name和一个包含Option的集合! Option包含id,name和一个对应的Survey类型! Survey中的Option就用Select * Form option where surId=?查出来放到集合中!页面遍历就行了![/quote] suroptlist 就是Select * Form option where surId=?查出来的list集合 <td><input type="radio" name="optId" value="${survey.suroptlist.optId }" />${survey.suroptlist.optName }</td> 我这样遍历是报错的java.lang.NumberFormatException: For input string: "optId"和java.lang.NumberFormatException: For input string: "optName" 页面遍历得怎么写呢
  • 打赏
  • 举报
回复
题目找出来在用list存答案,再到页面上把list遍历出来不久可以了?如果你用的hibernate那就更好,直接get到set到页面上遍历就可以了。
小小都不懂 2015-01-06
  • 打赏
  • 举报
回复
引用 2 楼 u011104235 的回复:
'1', '足球', '1', '1', '你最爱的运动是什么', '2', '羽毛球', '1', '1', '你最爱的运动是什么' '3', '篮球', '1', '1', '你最爱的运动是什么', ' '4', '网球', '1', '1', '你最爱的运动是什么', ' '7', '操场', '2', '2', '最美之地', ' '8', '图书馆', '2', '2', '最美之地', '9', '教学楼', '2', '2', '最美之地', '10', '办公楼', '2', '2', '最美之地', ' 数据库查出来是这样,但是在页面我想让题目只显示一次而不是显示一个选项同时又显示一个题目
用一维数组存储,然后在jsp页面遍历能方便点吧
Runner6587 2015-01-06
  • 打赏
  • 举报
回复
引用 6 楼 u011104235 的回复:
[quote=引用 4 楼 zxs6587 的回复:] 一个Survey类,一个Option类 Survey类中包含一个Option类数组 查询一个Survey类中Option Select * Form option where surId=? 楼主的sql难道是Select survey.*,option.* From survey,option where survey.id=survey.surId????/
的确是用SELECT * FROM options INNER JOIN survey on survey.surId = options.surId查询,只会一些简单的sql查询语句...有什么办法可以实现吗?能详细说说吗[/quote] 就是建立两个实体对象 Survey和Option Survey包含id,name和一个包含Option的集合! Option包含id,name和一个对应的Survey类型! Survey中的Option就用Select * Form option where surId=?查出来放到集合中!页面遍历就行了!
u011104235 2015-01-06
  • 打赏
  • 举报
回复
引用 5 楼 u011431550 的回复:
如果你只是想在前台容易去遍历的话;建议你在题目的实体【survey】中建一个list的属性字段;然后在dao层查询的时候,封装好对应的问题和答案选项;返回给前台页面即可;
是指在survey实体类中建一个private List list;然后把查询出来的两个表的数据封装到list中?
u011104235 2015-01-06
  • 打赏
  • 举报
回复
引用 4 楼 zxs6587 的回复:
一个Survey类,一个Option类 Survey类中包含一个Option类数组 查询一个Survey类中Option Select * Form option where surId=? 楼主的sql难道是Select survey.*,option.* From survey,option where survey.id=survey.surId????/
的确是用SELECT * FROM options INNER JOIN survey on survey.surId = options.surId查询,只会一些简单的sql查询语句...有什么办法可以实现吗?能详细说说吗
永远的幸福a 2015-01-06
  • 打赏
  • 举报
回复
如果你只是想在前台容易去遍历的话;建议你在题目的实体【survey】中建一个list的属性字段;然后在dao层查询的时候,封装好对应的问题和答案选项;返回给前台页面即可;
加载更多回复(4)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧