bbs树形打印(一)
前言:大家在bbs回帖时常常可以看到树形的回复形式。

dfs设计
(1) 为使得Connection仅打开一次,因此以conn作为其中一个递归参数,在递归全程不关闭conn;
(2)根据存入数据的树状结构,由root的id逐层往下走;每到一个结点递归扫描该结点的子结点;
(3)打印时进行字符串拼接,故引入第三个递归参数:“level”;
数据准备:
create database bbs; use bbs; create table article
(
id int primary key auto_increment,
pid int,
rootid int,
title varchar(255),
cont text,
pdate datetime,
isleaf int
); insert into article values (null, 0, 1, '蚂蚁大战大象', '蚂蚁大战大象', now(), 1);
insert into article values (null, 1, 1, '大象被打趴下了', '大象被打趴下了',now(), 1);
insert into article values (null, 2, 1, '蚂蚁也不好过','蚂蚁也不好过', now(), 0);
insert into article values (null, 2, 1, '瞎说', '瞎说', now(), 1);
insert into article values (null, 4, 1, '没有瞎说', '没有瞎说', now(), 0);
insert into article values (null, 1, 1, '怎么可能', '怎么可能', now(), 1);
insert into article values (null, 6, 1, '怎么没有可能', '怎么没有可能', now(), 0);
insert into article values (null, 6, 1, '可能性是很大的', '可能性是很大的', now(), 0);
insert into article values (null, 2, 1, '大象进医院了', '大象进医院了', now(), 1);
insert into article values (null, 9, 1, '护士是蚂蚁', '护士是蚂蚁', now(), 0);
java封装
package com.gdufe.bbs; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class TreeShow { public static void main(String[] args) {
TreeShow.show();
} public static Connection getConnection() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost/bbs";
conn = DriverManager.getConnection(url, "root", "1234");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
} public static void show() {
try {
Connection conn = TreeShow.getConnection();
Statement st = conn.createStatement();
String sql = "select * from article where pid=0";
ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getInt("id") + rs.getString("cont"));
tree(conn, rs.getInt("id"), 0);
}
} catch (Exception e) {
e.printStackTrace();
}
} public static void tree(Connection conn, int id, int level) {
Statement st = null;
ResultSet rs = null;
StringBuffer preStr = new StringBuffer(" "); for (int i = 0; i < level; i++) {
preStr.append(" ");
}
String sql = "select * from article where pid=" + id;
try {
st = conn.createStatement();
rs = st.executeQuery(sql);
while (rs.next()) {
System.out.println(preStr + "" + rs.getInt("id")
+ rs.getString("cont"));
if (rs.getInt("isleaf") != 0) {
tree(conn, rs.getInt("id"), level + 1);
}
}
} catch (Exception e) {
e.printStackTrace();
}
} }
(注:为了方便代码理解,故意省去rs,st,conn的close()操作)
输出结果
1蚂蚁大战大象
2大象被打趴下了
3蚂蚁也不好过
4瞎说
5没有瞎说
9大象进医院了
10护士是蚂蚁
6怎么可能
7怎么没有可能
8可能性是很大的
bbs树形打印(一)的更多相关文章
- 树形打印lua table表
为方便调试lua程序,往往想以树的形式打印出一个table,以观其表内数据.以下罗列了三种种关于树形打印lua table的方法;法一 local print = print local tconca ...
- Python树形打印目录结构
前言 这两天整理数据文件的时候发现,一层层的点击文件夹查看很繁琐,于是想写一个工具来递归打印出文件目录的树形结构,网上找了一些资料几乎都是使用的os.walk, 调试了以后发现返回的貌似的是一个“生成 ...
- Python requests模块学习笔记
目录 Requests模块说明 Requests模块安装 Requests模块简单入门 Requests示例 参考文档 1.Requests模块说明 Requests 是使用 Apache2 Li ...
- Python高手之路【八】python基础之requests模块
1.Requests模块说明 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 ...
- gdb 调试c/c++的一些小技巧
ptype obj/class/struct 查看obj/class/struct的成员,但是会把基类指针指向的派生类识别为基类 set print object on 这个选项可以看到派生对象的 ...
- linux(fedora) 第三课
树形打印所有进程名:pstree pstree | grep pstree -A2 -B2(查看pstree前后两行) NI的值[-20,20) nice(改变NI的值):改变程序优先级 nice - ...
- Python—requests模块详解
1.模块说明 requests是使用Apache2 licensed 许可证的HTTP库. 用python编写. 比urllib2模块更简洁. Request支持HTTP连接保持和连接池,支持使用co ...
- 爬虫初窥day4:requests
Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提供了你所需要的大多数 ...
- 14_python 匿名函数,递归函数
一.匿名函数 语法: 函数名 = lambda 参数: 返回值 # lambda x,y,z=1:x+y+z 注意: 1.函数的参数可以有多个. 多个参数之间⽤逗号隔开 2.匿名函数不管多复杂 ...
随机推荐
- zlog学习笔记(zc_profile)
zc_profile.h #ifndef __zlog_profile_h #define __zlog_profile_h #define EMPTY() #define zc_assert(exp ...
- GNU Trove trove4j
GNU Trove (http://trove4j.sourceforge.net/) 是一个Java 集合类库.在某些场景下,Trove集合类库提供了更好的性能,而且内存使用更少.以下是Trove中 ...
- Linux wait函数详解
wait和waitpid出现的原因 SIGCHLD --当子进程退出的时候,内核会向父进程SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止) --子进程退出时,内核将 ...
- QT QMianWindow类
QMianWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar).及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器等. QMainWindow ...
- Alpha版本测试报告
请根据团队项目中软件的需求文档.功能规格说明书和技术规格说明书,写出软件的测试计划.测试过程和测试结果,并回答下述问题. 1. 在测试过程中发现了多少Bug? 2. 你是怎么进行场景测试(scenar ...
- Webwork 学习之路【05】请求跳转前 xwork.xml 的读取
个人理解 WebWork 与 Struts2 都是将xml配置文件作为 Controler 跳转的基本依据,WebWork 跳转 Action 前 xml 文件的读取依赖 xwork-1.0.jar, ...
- 【语言基础】c++ 备忘录
1. C++ 整数类型范围 可以参照头文件limits.h定义的宏 #define INT_MAX 2147483647(32bit, 最大10位十进制) #define UINT_MAX ...
- <实训|第九天>掌握linux中普通的权限控制和三种特殊的权限(sst),做合格的运维工程师
linux中,权限的学习是必不可少的,不论是作为一名运维工程师或者是单一的管理者,学习好linux中的权限控制,你就可以保护好自己的隐私同时规划好你所管理的一切. 权限的学习是很多的,不要认为自己已经 ...
- Android一键多渠道分发打包实战和解析
当项目需要有更多的客户的时候,你就会考虑将apk上架到应用商店了,无奈天朝Android应用商店真的是百家争鸣,据某地不完全统计已经有900+.若将Apk上架到所有的应用商店是个好主意,但是据统计也就 ...
- SQLServer数据导入Mongodb
一.思路 MongoVUE免费版支持MySQL导入Mongo,所以思路是SQLServer导入MySQL,再从MySQL导入Mongo. 二.准备 1,安装mysql数据库(我用的是WAMP,集成my ...