jscsqb(大漠沙如雪) 请进领分,令再加200份问大家类似的问题?

uiiu 2003-10-16 07:32:36
为感谢jscsqb在下面的题目中的帮助,在jscsqb加100分
http://expert.csdn.net/Expert/topic/2351/2351787.xml?temp=.6661035

另我加200分问大家类似的问题:

我的表名:abc (mysql数据库)

结构 id name father
数据 1  AAA   0
   2  BBB   0
   3  CCC   0
   4  A1   1
   5  A2   1

我的JSP代码:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page language="java" %>
<%@ page import="java.sql.*"%>
<jsp:useBean id="myLinkDb" scope="application" class="myjspdb.DB"/>
<%

ResultSet rs =null;
ResultSet rs1 =null;
int id;

String sql="select * from abc where father=0";

myLinkDb.createStmt();
try{
rs=myLinkDb.execute(sql);
while(rs.next()){
id=rs.getInt(1);

out.print(id+":");
out.print(rs.getString(2)+"<br>");

String sql1="select * from abc where father="+id;
rs1=myLinkDb.execute(sql1);
while(rs1.next()){
out.print("    "+rs1.getString(1)+":");
out.print(rs1.getString(2)+"<br>");
}

}
}catch(SQLException e){}

%>

我的Javabean代码:

package myjspdb;

import java.sql.*;
import java.io.*;
import java.util.*;
import org.w3c.dom.*;

public class DB {

Connection dbConn = null;
Statement stmt = null;
ResultSet rs = null;

public DB(){
String jdbcDriver = "com.mysql.jdbc.Driver";
String dbURL = "jdbc:mysql://localhost:3306/test?user=test&password=test&useUnicode=true&characterEncoding=gb2312";
try {
Class.forName(jdbcDriver).newInstance();
dbConn = DriverManager.getConnection(dbURL);
}
catch(Exception e) {
System.err.println("DB(): 报错 " + e);
}
}

public void createStmt(){
try{
stmt = dbConn.createStatement();
}
catch(Exception e) {
System.err.println("createStmt(): 报错" + e);
}
}

public ResultSet execute(String sql)throws SQLException{
if (stmt != null) {
this.rs=stmt.executeQuery(sql);
return this.rs;
} else
return null;
}

}


在我运行test.jsp后显示结果为:
1:AAA
4:A1
5:A2

可是我希望是得到:
1:AAA
4:A1
5:A2
2:BBB
3:CCC

请问怎么样才能得到我想要的结果?谢谢!(帮忙解决令开贴给200分)


...全文
105 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
uiiu 2003-10-17
  • 打赏
  • 举报
回复
谢谢,问题解决了,谢谢 myblessu(寒飞) 的代码!

本题是给jscsqb补分的,所以我另开贴再给myblessu,Eraserpro,jscsqb加分.
mysam 2003-10-16
  • 打赏
  • 举报
回复
感觉有点晕!
myblessu 2003-10-16
  • 打赏
  • 举报
回复
javabean改动createStmt和execute方法:

public Statement createStmt(){
try{
return dbConn.createStatement();
}
catch(Exception e) {
return null;
}
}

public ResultSet execute(Statement stmt,String sql)throws SQLException{
if (stmt != null) {
this.rs=stmt.executeQuery(sql);
return this.rs;
} else
return null;
}

jsp改为:

<%@ page contentType="text/html; charset=gb2312" %>
<%@ page language="java" %>
<%@ page import="java.sql.*"%>
<jsp:useBean id="myLinkDb" scope="application" class="myblessu.DB"/>
<%
Statement stmt,stmt1;
ResultSet rs =null;
ResultSet rs1 =null;
int id;

String sql="select * from abc where father=0";

stmt=myLinkDb.createStmt();
stmt1=myLinkDb.createStmt();
try{
rs=myLinkDb.execute(stmt,sql);
while(rs.next()){
id=rs.getInt(1);

out.print(id+":");
out.print(rs.getString(2)+"<br>");

String sql1="select * from abc where father="+id;
rs1=myLinkDb.execute(stmt1,sql1);
while(rs1.next()){
out.print("    "+rs1.getString(1)+":");
out.print(rs1.getString(2)+"<br>");
}

}
}catch(SQLException e){}

%>
swinging 2003-10-16
  • 打赏
  • 举报
回复
建议看看STATEMENT的JDK API说明。
jscsqb 2003-10-16
  • 打赏
  • 举报
回复
rs1=myLinkDb.execute(sql1);
你这句话不是和上次那个问题一样吗?都是用了同一个Statement。
uiiu 2003-10-16
  • 打赏
  • 举报
回复
jscsqb(大漠沙如雪) ,我原来是觉的没有必要要2个statement,不过针对这用javabean是不是要public void createStmt() 改为返回createStmt的才行?


Eraserpro :谢谢 ,你这么一解释我就明白了,

wellsoon: 谢谢你,不过我不是很明白你的用法.能否给段代码.谢谢!
wellsoon 2003-10-16
  • 打赏
  • 举报
回复

通过递归,我这样可以实现无限层次的处理。
wellsoon 2003-10-16
  • 打赏
  • 举报
回复
关注一下,我是多定义了一个表示层次等级的字段,然后用递归从数据库里查出来。
然后生成xml。
例如:

<?xml version="1.0"?>
<subcol>
<col>
<colno>0</colno>
<pno>0</pno>
<level>0</level>
<subcol>
<col>
<colno>1</colno>
<pno>0</pno>
<level>1</level>
<subcol>
<col>
<colno>3</colno>
<pno>1</pno>
<level>2</level>
</col>
</subcol>
</col>
<col>
<colno>2</colno>
<pno>0</pno>
<level>1</level>
</col>
<col>
<colno>5</colno>
<pno>0</pno>
<level>1</level>
</col>
</subcol>
</col>
</subcol>
Eraserpro 2003-10-16
  • 打赏
  • 举报
回复
你第二次用同一个Statement时,第一次的结果集会被关闭的!用两个Statement就可以了。
jscsqb 2003-10-16
  • 打赏
  • 举报
回复
用上次的方法不行吗?
为什么用一个statement呢?

81,092

社区成员

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

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