java结合数据实现递归

问题描述

news_types{ id parentid message}最终输入结果显示出级别 问题补充:chen_yongkai 写道

解决方案

写了这么多才3分。。。哎,真是不容易啊
解决方案二:
这个是基于广度遍历优先的算法,News_type 为一个树下面是怎么构造出树和怎么去遍历树public class DG{ public static void main(String args[]) throws SQLException { News_type n = getNewsTreeById("8a65adf12e504bf5012e5050c72c0008"); show(n); } public static void show(News_type n){ if(n.getSons().size()==0){ System.out.println(n.getId()); return ; }else{ for(News_type n1 :n.getSons()) show(n1); } } public static News_type getNewsTreeById(String id) throws SQLException{ Connection conn = DBhelper.getConnection(); PreparedStatement st = null; ResultSet rs = null; News_type news_tree=new News_type(); news_tree.setSons(new HashSet<News_type>()); try { st = conn.prepareStatement("select * from TB_SYS_RESOURCES where parentid = ?"); st.setString(1, id); rs = st.executeQuery(); while(rs.next()){ News_type news = new News_type(rs.getString(1),new HashSet<News_type>() ,rs.getString(3)); news_tree.getSons().add(news); } rs.close(); getTree(st, news_tree); } catch (Exception e) { }finally{ conn.close(); } return news_tree; } private static void getTree(PreparedStatement st, News_type news_tree) throws SQLException { ResultSet rs; for(News_type n :news_tree.getSons()){ st.setString(1, n.getId()); rs = st.executeQuery(); while(rs.next()){ News_type news = new News_type(rs.getString(1),new HashSet<News_type>() ,rs.getString(3)); n.getSons().add(news); } rs.close(); } for(News_type n :news_tree.getSons()){ getTree(st, n); } } }class News_type{ public News_type(){} public News_type(String id, Set<News_type> sons, String message) { super(); this.id = id; this.sons = sons; this.message = message; } private String id; private Set<News_type> sons; private String message; public String getId() { return id; } public void setId(String id) { this.id = id; } public Set<News_type> getSons() { return sons; } public void setSons(Set<News_type> sons) { this.sons = sons; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } @Override public int hashCode(){ return this.id.hashCode(); } @Override public boolean equals(Object obj) { if(obj instanceof News_type){ News_type cast = (News_type)obj; if(cast.getId().equals(cast.getId())) return true; } return false; }}
解决方案三:
我明白你的意思了,自己写的话,通过id抓取一整个树的话可以是可以,而且比较麻烦,没有延迟加载这个很耗费内存,建议使用hibernate,通过它的级联关系来获取整个树,不用写什么代码,做些配置文件就可以了
解决方案四:
根据id来查询 节点下面的所有id么,还有要求是什么格式的?
解决方案五:
ok 上java代码这个Connection我没有写,你就按照你们项目的来 public int getLevelById(String id) throws SQLException{ Connection conn = DriverManager.getConnection(""); PreparedStatement st = null; ResultSet rs = null; int level = 1; try { String parentid = null; st = conn.prepareStatement("select parentid from news_types where id = ?"); st.setString(1,id); do{ rs = st.executeQuery(); if(rs.next()){ parentid = rs.getString(1); level++; rs.close(); } st.setString(1, parentid); }while(parentid!=null); } catch (Exception e) { }finally{ conn.close(); } return level; }
解决方案六:
楼主你明明写的是java嘛。。。sql什么的存储过程这个写的很清楚[url]http://blog.csdn.net/ACMAIN_CHM/article/details/4142971[/url]
解决方案七:
这个结构明显就不好使嘛一般是这个结构class Strut{private String id;private Strut parent;private String message;//get...//set...}public int getLevel(Strut s){ int level = 0; while((s=s.getParent())!=null){ level++; } return level;}
解决方案八:
oracle中这么玩select id ,parentid,message from news_types start with id = 1 connect by prior id = parentid 可以在表名后面加过滤条件。
解决方案九:
神马情况?问题描述好简约!引用最终输入结果 显示出级别

时间: 2024-09-19 09:03:29

java结合数据实现递归的相关文章

JAVA大数据计算突然变慢

问题描述 JAVA大数据计算突然变慢 计算是从从一个ResultSet中遍历读取(非循环读取),并计算. 之前好好的,突然间程序就跑的很慢很慢-- SQL与程序都没有问题的情况下,到底会是什么问题导致? 跑程序是之前和现在都是用myeclipse直接跑的 真心不知道问题在哪,求好心人提点. 解决方案 cpu如果过热,散热不良,会导致计算机突然减速 计算机中别的进程的运行也会干扰到这个进程的运行. 解决方案二: 排除硬件的前提下: 1)单纯数据查询工具中查询同样SQL是否也数据慢? 慢就是DB的问

java jtable数据排序问题

问题描述 java jtable数据排序问题 我要让表格中的一列数据以数据类型进行排序,需要重写defaulttable的getcolunmnClass的方法,但是我的数据是先点击一个按钮再传输进去的,这样如果先重写那个方法,此时列表中的数据为Null,会报错,那么应该怎么办呢? 解决方案 Java 中JTable 数据刷新问题 解决方案二: 在后台就让数据以类型排序呗

java-求助:JAVA二进制数据与字符串转换问题

问题描述 求助:JAVA二进制数据与字符串转换问题 从文件中按照GBK编码方式读取二进制流,将二进制数据封装到XML数据包中,经过 网络传输到另一端后,再将二进制数据按照GBK编码写回到某一文件中,二进制数据 能够获取到,但是经过字符串处理后,到另一端如何还原回去?大神,求破! 解决方案 你所谓的按照GBK编码方式读取,关键问题在于你的文件本身是不是按照GBK来写的?如果本身就是GBK的文件,你读取后封装为XML,传输到另一端后,直接写入文件就可以了,不需要还原. 但是如果你原来的文件不是GBK

线程-java缓存数据同步问题

问题描述 java缓存数据同步问题 最近在做一个简单的java缓存,线程的主要功能是:查询缓存中是否存在该值,存在则返回,不存在则计算,计算完了将该键值对放到Cache里面.但是这里有个数据同步的问题,可能会有重复计算.即线程1发现不存在该值,去计算,线程2访问同一数据随后也发现不存在该值,去计算.这样就会出现重复计算,请问有没啥办法避免.谢谢大家了! public void run() { Long result = null; InputMsg msg = new InputMsg(num,

java-extjs 树的问题,加载不出来,后台是用Java到数据读取的数据转换成json格式

问题描述 extjs 树的问题,加载不出来,后台是用Java到数据读取的数据转换成json格式 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@include file="common/common.jsp"%> <% pagemenustr += "addBtn(tb,'" + I18n.getText(&

java大批量数据导入数据库

问题描述 java大批量数据导入数据库 有大学130W条数据需要写入数据库,但是一条一条执行sql语句写入速度太慢, 有没有什么好的方法能将这些数据快速写入数据库? 解决方案 先把数据写到文件(比如csv格式),上传到服务器,导入的SQL很简单(注意是服务器上文件路径) BULK INSERT table1 FROM 'D:mydata.csv' WITH( FIELDTERMINATOR = ',', ROWTERMINATOR = 'n' ) 解决方案二: 每种数据库都支持一个把数据文件直接

java字符串组合排列递归问题

问题描述 java字符串组合排列递归问题 String a0,a1,a2,...,an; a0="我饿全文"; a1="ABC"; a2="abc"; '''' an="wre"; 每次从每个an中只取一个字符组合成字符串,全部排列出来,如: 我+A+a+w,我+A+a+r等.这个怎么弄啊? 解决方案 /* package whatever; // don't place package name! */ import jav

java关于数据提取的问题

问题描述 java关于数据提取的问题 假如说Excel表中某一列为电话号码13145687788,怎样提取不会让电话号码变成这个样子 2.0132135016E10 解决方案 这是答案,我刚找到, 防止提取的数科学计数法,利用 DecimalFormat df = new DecimalFormat("0"); String whatYourWant = df.format(cell.getNumericCellValue()); 这个标签就ok了 解决方案二: Java 中JTabl

帮忙看一下,java连接数据的问题!!求大神帮忙

问题描述 帮忙看一下,java连接数据的问题!!求大神帮忙 解决方案 解决方案二: 解决方案三: 求大神帮忙啊!!!!!!!!!!!!!!!!!!! 解决方案四: 看你的jar包,你的sqlserver应该是2008版本,换个jar包,sqljdbc4 解决方案五: 应该是版本不对,或者driverStr写错了 解决方案六: buildpath里看下jar包添加了没有.如果添加了可以试一下把项目重新编译一下,再不行可能是版本不对,换个驱动包 解决方案七: 驱动类找不到,检查下你的驱动jar包有没