java递归查询方法

时间:2022-08-28 17:54:45

一、需求

  项目里要让用户能够设置所选择教材的章课节,以针对章课节提供相应的题目供用户做题。

  设计:用户设置了教材后,首次登录,进行章节设置时。默认为用户选择第一章、第一课、第一节。

  思路:用户访问页面,章一栏显示所有章,课一栏显示第一章下所有课程,节一栏显示第一章、第一课下的所有节。然后获取用户当前选择的章课节信息。如果当前用户没有设置过该教材的章课节,就为其设置默认的第一章、第一课、第一节。

  数据库设计:此处将章课节所有信息存放到一张表中,可递归查询。最上一级章的parentid是教材的id。故给一个教材id便可以查找到其下所有的章课节信息。

二、解决

  已设置的我们这里不讨论,只需要到库中查询对应的章课节即可。

  那么对于默认第一章第一课第一节,我们这里使用一个递归函数将查询的结果存放到一个list中

  /**
* 根据给定的id,查询其下的第一课、第一节(不只适用于章课节三级,如果下面还有级别的目录,也可查
*
* 询出)
*
* @param l    是教材id
* @param list  
* @return
*/
public void getSubChapter(long l, List<BookChapter> list) {
BookChapter c = null;
String sql = "SELECT D.chapter_id chapter_id, D .chapter_name chapter_name, D . LEVELS LEVELS FROM "
+ "( SELECT * FROM mic_study_book_chapter c WHERE c.parent_chapter_id =? ORDER BY c.code ) D WHERE ROWNUM = 1 ";
Object[] params = { l };
try {
logger.info(sql.toString().replaceAll("\\?", "{}"), params);
List<BookChapter> li = this.getJdbcTemplate().query(sql, params,new BookChapterRowMapper());
if(li.size() != 0){
c = li.get(0);
if (c != null) {
list.add(c);
getSubChapter(c.getId(), list);//递归查询
}
}
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
}

递归查询的特点:函数方法自己掉用自己,通过某个条件判断跳出最后一个被调用的递归方法。

java递归查询方法的更多相关文章

  1. Java:方法的参数是传值还是传引用

    Java中方法的参数总是采用传值的方式. 下列方法欲实现对象的交换,但实际上是不能实现的. public void swap(simpleClass a,simpleClass b){ simpleC ...

  2. Java之方法重载篇(我重载了,你要如何来调用我。。)

      一.课前引言 请看一下代码,你发现什么特殊之处了吗? public class MethodOverload { public static void main(String[] args) { ...

  3. effective java —— 终结方法守卫者

    目录: effective java —— 终结方法守卫者 effective java 第2章:创建和销毁对象.第7条 : 避免使用终结方法.最后的“终结方法守卫者 (finalizer guard ...

  4. Java parseInt&lpar;&rpar;方法

    1.Java parseInt()方法 使用此方法得到的原始数据类型的一个特定的字符串. parseXxx()是一个静态方法,可以有一个参数或两个. java parseInt() 语法:   sta ...

  5. 几种任务调度的 Java 实现方法与比较

    综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺 ...

  6. JNI系列——C文件中的方法调用Java中方法

    1.创建xxx.jni包并在该包下实现一些Java的方法,和要调用的本地方法 2.实现MainActivity中的按钮点击事件-即点击按钮调用本地的方法 3.在C文件中的方法中回调Java的方法 3. ...

  7. java中方法参数的一些总结&lpar;1&rpar;

    1.问题说明        在C++中,函数调用时有传值调用和传址调用两种方式,但在Java中只有传值调用一种方式.Java中的方法参数为那几种基本数据类型的情况跟C++中一样,传入的只是变量的拷贝. ...

  8. 新手容易混乱的String&plus;和StringBuffer,以及Java的方法参数传递方式。

    之前在交流群里和猿友们讨论string+和stringbuffer哪个速度快以及Java的方法参数传递的问题,引起了群里猿友的小讨论.最终LZ得出的结果是string+没有stringbuffer快, ...

  9. JAVA本地方法详解,什么是JAVA本地方法?

    一. 什么是Native Method   简单地讲,一个Native Method就是一个java调用非java代码的接口.一个Native Method是这样一个java的方法:该方法的实现由非j ...

随机推荐

  1. Django配置和初探

    Django是python下的一款网络服务器框架. 1.安装 windos:    pip install django linux:    sudo pip install django 2.启动 ...

  2. Linux下的应用程序性能分析 总结

    Linux下的应用程序性能分析,根据内核程序和应用程序的不同,下文分两类进行描述. 我们侧重的是应用级别的程序,推荐google perf tool/kcachegrind组合 一.和内核有关的工具 ...

  3. Scrum Meeting 3-20151203

    任务安排 姓名 今日任务 明日任务 困难 董元财 请假(明天是编译截至最后一天) 学习上拉加入新的listview 无 胡亚坤 请假(明天是编译截至最后一天) 设计优化聊天页面 无 刘猛 请假(明天是 ...

  4. C&num; 以管理员方式启动Winform,进而使用管理员控制Windows Service

    问题起因: 1,) 问题自动分析Windows服务在正常运行时,确实会存在程序及人为原因导致该服务停止.为了在应用程序使用时确保该服务正常运行,于是有了该讨论主题. 2,)一般账户(尽管是管理员组账户 ...

  5. javascript中继承&lpar;二&rpar;-----借用构造函数继承的个人理解

    本人目录如下: 零.寒暄&回顾 一,借用构造函数 二.事件代理 三,call和apply的用法 四.总结 零.寒暄&回顾 上次博客跟大家分享了自己对原型链继承的理解,想看的同学欢迎猛击 ...

  6. Unity与IOS交互

    Unity IOS交互 @By 广州小龙  QQ群:63438968 环境:Mac os 10.9.2  Unity 4.2.1f4   Xcode 5.0.2 Unity IOS的交互我写过一个教程 ...

  7. Windows中根据端口定位持有者程序

    之前被一个问题所困扰, 电脑过一段时间就无法上网, 查询netstat, 会有大量的端口被占用, 但是看不出来是哪个程序开启的 ( 最终定位到是ADSafe搞得鬼 ) . 后来发现几个命令可以根据端口 ...

  8. mycat环境搭建

    最近工作中突然让搞mycat,特意私下在家先搞一套练个手: 1.先下载一个CentOS7 mini版本就可以(本人机器性能有限): 2.使用VMware创建虚拟机,过程百度下一大堆,这里不做详细介绍. ...

  9. 扇形多级菜单可配置Demo

    预览效果 领导是想把这个做成复选框,所以做成了可以多选的... Demo下载:https://github.com/zhangzn3/arc-menu

  10. &lbrack;Day8&rsqb; eclipse

    快捷键 1.内容辅助键  Alt+/ 2.格式化Ctrl+Shift+f 代码区域右键 -- Source – Format 3. 自动导包: Ctrl+Shift+o 如果当前类在多个包中都存在,这 ...