oracle数据库新建数据表工具遍历数据表不显示结果

1910人阅读
8、数据库相关(24)
1、从根结点开始找子节点
create table test (id& int ,pid int ,name varchar(10));
insert into test values ( 1, 0 ,'n1' );
insert into test values(& 2, 1 ,'n12');
insert into test values(& 3, 1 ,'n13');
insert into test values(& 4, 2 ,'n21');
insert into test values(& 5, 2 ,'n22');
insert into test values(& 6, 3 ,'n31');
insert into test values(& 7, 3 ,'n32');
insert into test values(& 8, 4 ,'n211');
insert into test values(& 9, 4 ,'n212');
从根结点开始找子节点(可以指定节点层级)
select id,pid,name ,level from test
--where level =3
start with id =2
connect by prior id =&
2、从叶结点开始找根节点
create table test (id& int ,pid int ,name varchar(10));
insert into test values ( 1, 0 ,'n1' );
insert into test values(& 2, 1 ,'n12');
insert into test values(& 3, 1 ,'n13');
insert into test values(& 4, 2 ,'n21');
insert into test values(& 5, 2 ,'n22');
insert into test values(& 6, 3 ,'n31');
insert into test values(& 7, 3 ,'n32');
insert into test values(& 8, 4 ,'n211');
insert into test values(& 9, 4 ,'n212');
从叶结点开始找根节点
prior 关键字 与谁放在一起,就是找谁
根节点的父节点不能是他本身,那会造成死循环
select *& from test /*where conditions*/
start with id=7
connect by id =
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:460652次
积分:6813
积分:6813
排名:第1745名
原创:218篇
转载:38篇
评论:96条
(1)(1)(1)(3)(1)(1)(1)(2)(1)(4)(1)(1)(1)(2)(2)(1)(6)(1)(2)(1)(1)(1)(3)(3)(4)(2)(3)(2)(1)(6)(2)(6)(2)(6)(9)(23)(8)(3)(10)(6)(13)(17)(3)(7)(14)(5)(10)(20)(4)(2)(4)(21)(1)下次自动登录
现在的位置:
& 综合 & 正文
JDBC连接Oracle数据库及List 的遍历
好久没写关于数据库连接的了,居然都不会了,果断发帖纪录一下。
数据库相关的Object类:
package com.lliu.JDBC;
public class AAA {
public AAA(){
public AAA(int ID, String name, String dept){
this.setID(ID);
this.setName(name);
this.setDept(dept);
public int ID;
public int getID() {
return ID;
public void setID(int iD) {
public String getName() {
public void setName(String name) {
this.name =
public String getDept() {
public void setDept(String dept) {
this.dept =
连接数据库并遍历其中Item:
package com.lliu.JDBC;
import java.sql.C
import java.sql.DriverM
import java.sql.PreparedS
import java.sql.ResultS
import java.sql.SQLE
import java.util.ArrayL
import java.util.I
import java.util.L
public class JDBCConnection {
public static void main(String[] args){
Connection conn =
PreparedStatement stmt =
ResultSet rs =
List&AAA& list =new ArrayList&AAA&();
AAA a = new AAA();
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@127.0.0.1:1521:xe",
stmt = conn.prepareStatement("select ID,NAME,DEPT from AAA");
rs = stmt.executeQuery();
while(rs.next()){
list.add(new AAA(rs.getInt(1),rs.getString(2),rs.getString(3)));
System.out.println(rs.getString(2));
}catch(Exception e){
e.printStackTrace();
if(rs != null){
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if(stmt != null){
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if(conn != null){
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Iterator&AAA& it = list.iterator();
while(it.hasNext()){
System.out.println(it.next().ID);
积少成多,每天进步一点,加油~~~
&&&&推荐文章:
【上篇】【下篇】Oracle Connect By Prior的用法(数据库中树结构的各种遍历) - huangronaldo - ITeye技术网站
博客分类:
Oracle Connect By用法
(数据库中树结构的各种遍历)
oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,
connect by
是结构化查询中用到的,
其基本语法是:
select ... from &TableName&where &Conditional-1&start
with &Conditional-2&connect by &Conditional-3&;
&Conditional-1&:过滤条件,用于对返回的所有记录进行过滤。&Conditional-2&:是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。&Conditional-3&:是连接条件,其中用PRIOR表示上一条记录,比如
CONNECT BY PRIOR org_id = parent_id就是说上一条记录的org_id
是本条记录的parent_id,即本记录的父亲是上一条记录。 早扫描树结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:第一步:从根节点开始;第二步:访问该节点;第三步:判断该节点有无未被访问的子节点,若有,则转向它最左侧的未被访问的子节,并执行第二步,否则执行第四步;第四步:若该节点为根节点,则访问完毕,否则执行第五步;第五步:返回到该节点的父节点,并执行第三步骤。
总之:扫描整个树结构的过程也即是中序遍历树的过程。
树结构的描述
树结构的数据存放在表中,数据之间的层次关系即父子关系,通过表中的列与列间的关系来描述,如EMP表中的EMPNO和MGR。EMPNO表示该雇员的编号,MGR表示领导该雇员的人的编号,即子节点的MGR值等于父节点的EMPNO值。在表的每一行中都有一个表示父节点的MGR(除根节点外),通过每个节点的父节点,就可以确定整个树结构。在SELECT命令中使用CONNECT
BY 和蔼START WITH 子句可以查询表中的树型结构关系。其命令格式如下:SELECT 。。。CONNECT BY {PRIOR
列名1=列名2|列名1=PRIOR 裂名2}[START WITH];其中:CONNECT
BY子句说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中。PRIORY运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。START
WITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。START WITH:
不但可以指定一个根节点,还可以指定多个根节点。
例1 、以树结构方式显示EMP表的数据。
SQL& SELECT EMPNO,ENAME,MGR
CONNECT BY PRIOR
START WITH ENAME=’KING’;
&!--[if !supportLists]--&7839&!--[endif]--&KING
14 rows selected.
运算符PRIOR被放置于等号前后的位置,决定着查询时的检索顺序。PRIOR被置于CONNECT
BY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向通过树结构,我们称之为自顶向下的方式。如:CONNECT BY
PRIOR EMPNO=MGR
例2 、从SMITH节点开始自底向上查找EMP的树结构。
SQL&SELECT EMPNO,ENAME,MGR
CONNECT BY EMPNO=PRIOR MGR
START WITH ENAME=’SMITH’;
—————————————————————————
4 rows selected.
PIROR运算符被置于CONNECT BY
子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。例如:CONNECT BY
EMPNO=PRIOR MGR在这种方式中也应指定一个开始的节点。
备注:例2的另外一种写法
EMPNO,ENAME,MGR
CONNECT BY PRIOR
START WITH
ENAME=' SMITH ';
定义查找起始节点
在自顶向下查询树结构时,不但可以从根节点开始,还可以定义任何节点为起始节点,以此开始向下查找。这样查找的结果就是以该节点为开始的结构树的一枝。
例3、 查找JONES直接或间接领导的所有雇员信息。
SQL>SELECT EMPNO,ENAME,MGR
CONNECT BY PRIOR EMPNO=MGR
START WITH ENAME=‘JONES’;
——————————————————————————
5 rows selected.
WITH 不但可以指定一个根节点,还可以指定多个根节点。
例4、 查找由FORD和BLAKE 领导的所有雇员的信息。
SQL&SELECT EMPNO,ENAME,MGR
CONNECT BY PRIOR EMPNO=MGR
START WITH ENAME IN (’FORD’,’BLAKE’);
——————————————————————————
&!--[if !supportLists]--&7844&!--[endif]--&TURNER
8 rows selected.
4.使用LEVEL在具有树结构的表中,每一行数据都是树结构中的一个节点,由于节点所处的层次位置不同,所以每行记录都可以有一个层号。层号根据节点与根节点的距离确定。不论从哪个节点开始,该起始根节点的层号始终为1,根节点的子节点为2,
依此类推。图1.2就表示了树结构的层次。
图案1.2 EMP表树结构层次图
例5、显示EMP表中的各行数据及层号。
SQL&SELECT LEVEL,EMPNO,MGR
BY PRIOR EMPNO=MGR
WITH ENAME=‘KING’;
伪列LEVEL为数值型,可以在SELECT 命令中用语各种计算机。
例6、使用LEVEL改变查询结果的显示形式。
SQL&COLUMN EMPLOYEE FORMAT A20
SQL& SELECT EMPNO,RPAD(‘ ‘,LEVEL*3) ||ENAME EMPLOYEE,MGR
CONNECT BY PRIORY EMPNO=EMR
START WITH ENAME=’KING’;
&!--[if !supportLists]--&7839&!--[endif]--&KING
5.节点和分支的裁剪在对树结构进行查询时,可以去掉表中的某些行,也可以剪掉树中的一个分支,使用WHERE子句来限定树型结构中的单个节点,以去掉树中的单个节点,但它却不影响其后代节点(自顶向下检索时)或前辈节点(自底向顶检索时)。
SQL&COLUMN EMPLOYEE FORMAT A20
SQL& SELECT
EMPNO,RPAD(‘ ‘,LEVEL*3) ||ENAME EMPLOYEE,MGR
WHERE ENAME!=’SCOTT’
CONNECT BY PRIORY EMPNO=EMR
START WITH ENAME=’KING’;
&!--[if !supportLists]--&7839&!--[endif]--&KING
6.排序显示象在其它查询中一样,在树结构查询中也可以使用ORDER
BY 子句,改变查询结果的显示顺序,而不必按照遍历树结构的顺序。
例10以EMPNO的顺序显示树结构EMP 中的数据。
SQL& SELECT EMPNO,ENAME,MGR
CONNECT BY PRIOR EMPNO=MGR
WITH ENAME=’KING’;
ORDER BY EMPNO;
&!--[if !supportLists]--&7839&!--[endif]--&KING
14 rows selected.
在使用SELECT 语句来报告树结构报表时应当注意,CONNECT BY子句不能作用于出现在WHERE子句中的表连接。如果需要进行连接,可以先用树结构建立一个视图,再将这个视图与其他表连接,以完成所需要的查询。
例如:表结构如下:
create table t2(root_id number,id number,name
varchar(5),description varchar(10));
insert into t2(root_id,id,name,description) values(0,1,'a','aaa');insert
into t2(root_id,id,name,description) values(1,2,'a1','aaa1');insert into
t2(root_id,id,name,description) values(1,3,'a2','aaa2');insert into
t2(root_id,id,name,description) values(0,4,'b','bbb');insert into
t2(root_id,id,name,description) values(4,5,'b1','bbb1');insert into
t2(root_id,id,name,description) values(4,6,'b2','bbb2'); 如图:
1.获取完整树:
* from t2;select * from t2 start with root_id = 0 connect by prior id =
2.获取特定子树:
select * from t2 start with id = 1 connect by prior id =
from t2 start with id = 4 connect by prior id = root_
3.如果connect
by prior中的prior被省略,则查询将不进行深层递归。select * from t2 start with root_id = 0
connect by id = root_
from t2 start with id = 1 connect by id = root_
huangronaldo
浏览: 74174 次
jodconverter-core 3.0-beta-4 Ma ...
/api/loo ...
[i][/i][b][/b][color= ...
我Word转pdf的时候 2003版的不能转报错, ...
PDFUtil.java中有的类引用不到1515人阅读
Oracle 10g(18)
//一张表中父编号 = 字编号情况,
CREATE OR REPLACE FUNCTION nademo.GET_DEPTNAME(pId_param IN NUMBER)
RETURN VARCHAR2-- 返回值的数据类型
&&& out_connNAME& VARCHAR2(500);
&&& --得到给定部门所有上级的数据集
&&& FOR K IN (
&&& SELECT deptID
&&&&&&&&& ,deptNAME
&&&&& FROM Dept
&&& START WITH deptID=pId_param CONNECT BY PRIOR PARENTID = deptID
&&&& ORDER BY deptID)
&&&&&&&&&&&&&&& LOOP
&&&&&&&&&&&&& --把所有上级的名称连接起来
&&&&&&&&&&&&& out_connNAME:=out_connNAME||K.deptNAME;
RETURN out_connNAME;
WHEN OTHERS THEN
&&& --返回''
&&& RETURN '';
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
(1)(2)(3)(3)(2)(7)(4)(5)(4)(15)(6)(6)(6)(5)(1)(4)(4)(3)(11)(16)(26)(17)(17)(13)(15)(1)(13)(1)(1)(3)(1)
访问:219740次
积分:4337
积分:4337
排名:第3759名
原创:208篇
评论:24条

我要回帖

更多关于 创建数据库和数据表 的文章

 

随机推荐